面向对象程序设计实验指导书
实验七 继承与派生
(4学时)
一、实验目的
1.学习定义和使用类的继承关系,定义派生类。 2.熟悉不同继承方式下对基类成员的访问控制。 3.学习利用虚基类解决二义性问题。
二、实验任务
1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。
2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
3.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。
4.(选做)从实验6中的people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people类派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[E21]。从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。类之间的关系如图7—1所示。
三、实验步骤
1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:
19
面向对象程序设计实验指导书
图7-1 实验任务的类图
error C2248:’age’:cannot access private member declared in class’Animal’ error C2248:’age’:cannot access private member declared in class’Animal’ 把age改为公有成员变量后重新编译就可以了。程序名:lab7—1.cpp。
2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7—2.cpp。 3.用debug功能跟踪程序lab7—2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。
4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7—3.cpp。
编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。
20
面向对象程序设计实验指导书
实验八 多态性
(2学时)
一、实验目的
1.掌握运算符重载的方法。
2.学习使用虚函数实现动态多态性。
二、实验任务
1.定义Point类,有坐标—x,—y两个成员变量;对Point类重载“++”(自增)、 “--”(自减)运算符,实现对坐标值的改变。
2.定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。
3.(选做)对实验六中的people类重载“一一”运算符和“:”运算符,“:=”运算符判断两个people类对象的id属性是否相等;“=”运算符实现people类对象的赋值操作。
三、实验步骤
1.编写程序定义Point类,在类中定义整型的私有成员变量—x、—Y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“一一”(自减)运算符,实现对坐标值的改变。程序名:lab8—1.cpp。
2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。
21
面向对象程序设计实验指导书
实验九 异常处理
(2学时)
一、实验目的
1.正确理解C++的异常处理机制。 2.学习异常处理的定义和执行过程。
二、实验任务
定义一个异常类CException,有成员函数Reason(),用来显示异常的类型。在子函数中触发异常,在主程序中处理异常,观察程序的执行流程。
三、实验步骤
编写程序lab9_1.cpp。在CException类的成员函数Reason()中用cout显示异常的类型,在函数fnl()中用throw语句触发异常,在主函数的try模块中调用fnl(),在catch模块中捕获异常。
22
面向对象程序设计实验指导书
实验十 Windows应用程序框架
(2学时)
一、实验目的
简单了解Windows程序设计。
二、实验任务
练习使用VC++的Appwizard(应用程序向导)生成一个最简单的Windows应用程序。
三、实验步骤
1.创建一个项目
(1)单击File菜单中的New选项,显示New(新建)对话框(如图1-1所示)。
(2)在Project(项目)选项卡中,选择MFC AppWizard(exe)。在Location(位置)文本框中指定一个路径d:\c++lab,在Preject Name(项目名称)文本框中为项目输入一个名字lab10-1,单击OK。
2.在出现的对话框中选择Miltiple Document、Document/View Architecture support、中文[中国],单击Next按钮。
3.在选择提供项目所需要的数据库支持种类时,选择None,不使用数据库,单击Next按钮。
4.设置程序的OLE和ActiveX支持类型,选择None,单击Next按钮。 5.在设置用户界面特征的对话框中,不做任何改变,单击Next按钮。 6.设置使用MFC库的方式,接受缺省的选项。 7.设置类和文件名,不做任何修改。
8.单击Finish(完成)按钮后,AppWizard显示一个摘要表,其中列出了所选的项目 特征。单击OK创建项目。 9.编译、运行labl0-1。
23