实验二 C++面向对象编程实验 联系客服

发布时间 : 星期一 文章实验二 C++面向对象编程实验更新完毕开始阅读e5a93a1002768e9950e73802

实验二 C++面向对象编程实验 (4学时)

一实验目的

1.掌握类与对象的编程方法

2.掌握继承与派生机制的编程方法

3.掌握多态性与虚函数机制的编程方法

二实验原理

一个 c++程序由多个程序单位构成,每一个程序单位作为一个文件,编译系统分别对每个程序文件分别编译,然后连接起来形成可执行程序。面向对象C++程序中,类的定义通常在.文件中声明,类的实现在.cpp文件中完成。面向对象技术强调软件的可重用性。在C++中可重用性是通过“继承”这一机制来实现的。派生类的继承方式包括公有继承、私有继承、保护继承三种方式。多态性是面向对象设计中的一个重要特征。它允许不同的对象以自己特有的不同方式响应相同的消息。多态性分为静态多态性和动态多态性。前者是在编译时决定调用哪一个函数,后者是在运行时决定。静态多态性是通过重载实现的,动态多态性是通过虚函数实现的。

三实验内容

1.在Visual Studio 2008中开发C++面向对象程序的基本方法实例

在本例中,将创建一个主程序testexp1.cpp,另外创建一个time类,该类中包含两个成员函数和三个成员变量。在testexp1.cpp中将生成time类的对象。 1.1新建一个Win32控制台应用程序

打开“文件”---“新建”---“项目”菜单,创建一个win32控制台应用程序。项目名称及解决方案名称为testexp1

点击确定,在接下来出现的对话框中点击完成。

1.2新建一个time类

在textexp1解决方案资源管理器工作区点击鼠标右键,添加一个类。

选择C++类。

类名写为time,点击完成。

1.3在主程序中创建time类的对象并调用。 在time.h中输入以下语句。

在time.cpp中输入以下语句

在testexp.cpp中输入以下语句:

接下来,选择“生成”菜单,点击“生成testexp11”,进行程序的编译链接。之后运行程序,观察结果。

2.以time类为父类,派生出一个子类,并为子类增加新的成员函数。

在先前的time类中,对输入的hour、minute、second等值的内容并未进行检查。请在time类的基础上,派生一个子类time_inspect,并在子类中增加一个返回值为int类型的inspect函数,该函数将执行hour、minute、second数值的检查,要求0≤hour≤23; 0≤minute≤59; 0≤second≤59。如果三个数值检查同时符合要求,则返回0;如果三个数值中有任意一项不符合要求,则在屏幕上输出出错语句(如仅hour数值出错,则输出“The value of hour is error”,如果hour和minute出错,则输出两句话“The value of hour is error”

“The value of minute is error”,如果hour、minute及second三个数值均出错,则输出三个出错语句等)

Inspect程序最后需返回结果。 结果0:检查正确

结果 1:数值检查有错。

在子类中另外增加一个calculate函数,要求该函数能够跟用户输入的hour、minute、second值,计算出这一段时间包含的总秒数并输出计算结果。

如1hour+1minute+1second=3661second

接下来,修改修改testexp1.cpp主程序,在主程序中调用inspect函数,若inspect返回值为0,则继续调用show_Time函数;如果返回值不为0,则程序不再调用show_Time函数,直接返回。

调用完show_Time函数,再调用calculate函数。 3.利用函数覆盖的方法,在子类中重写一个show_Time函数

在重写的show_Time函数中先调用inspect函数,再执行输出语句。 接下来,适当对testexp1.cpp主程序进行修改,使其不再直接调用inspect函数,却能够执行子类对象的检查数值功能。

4.利用虚函数方法,在子类中重新编写一个show_Time函数

在重写的show_Time函数中先调用inspect函数,再执行输出语句。 接下来,适当对testexp1.cpp主程序进行修改,使其不再直接调用inspect函数,却能够执行子类对象的检查数值功能。

四实验思考

1.说明生成一个类的对象都有哪些方法?对第三部分第1个例子中的例子进行修改,使得testexp1.cpp中通过指针的方式进行time类对象的创建及调用。

2.如果time类中的成员变量类型为private,则使用你编写的子类中的inspect函数是否能正确编译?为什么?

3.说明函数重载、子类对父类的函数覆盖、虚函数具有什么区别。

五实验结果及分析

1.针对本次试验内容,给出第三部分示例程序及己设计的程序的运行结果截图,源代码另附。

2.对本次试验过程中遇到的问题及解决方法进行分析总结,并简要说明本次试验的心得体会。