当前位置:首页 > 《C++语言程序设计》实验教学指导6
天津理工大学
《C++语言程序设计》实验教学指导6
课程代码: 课程名称: 适用专业: 指导教师:
1460420
C++语言程序设计/ C++ Programming Language 软件工程 张一鸣
开课院(系)、实验室:华信软件学院、HX103机房 实验指导书名称: C++语言程序设计(第3版)学生用书
实验六 继承与派生
0. 实验目的
(1) 学习声明和使用类的继承关系,声明派生类。
(2) 熟悉不同继承方式下对基类成员的访问控制。 (3) 学习利用虚基类解决二义性问题。
1. 实验任务
(1) 声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在dog
的成员函数SetAge(int n)中直接给age 赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?为什么?
(2) 将基类Animal的缺省构造函数改为Animal(int n)并用n为age赋值,看看
会出现什么问题,请修改程序实现:构造dog类对象时,派生类构造函数为基类构造函数传参数。
(3) 分别在Animal和dog类构造函数、析构函数中增加“构造基类对象!”、“析
构基类对象!”、“构造派生类对象!”、“析构派生类对象!”语句,在Debug中观察构造函数、析构函数的执行过程。
(4) 声明一个车(vehicle)基类,具有MaxSpeed、Weight整型成员变量,Run、
Stop成员函数,由其派生出自行车(bicycle)、汽车(motorcar)类。自行车(bicycle)具有高度(Height)属性,汽车(motorcar)具有座位数(SeatNum)属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类,为什么?如果不设置为虚基类,会有什么问题?请注意记录,并作出结论。 (5) (选做)从实验六的people类派生student类,添加属性:班号char classNo[7];
从people类派生新类teacher,添加属性:职务char zhiwu[11]、部门char department[21]。从student类派生出研究生类graduate,属性:专业char subject[21]、导师teacher_adviser;从graduate和teacher类派生出TA(助教生)类。注意虚基类的使用。重载相应成员函数,测试这些类。类之间的关系图见“学生用书”。
2. 实验步骤
(1) 编写程序声明基类Animal,成员变量age为私有。构造派生类dog,在dog
的成员函数SetAge(int n)中直接为age 赋值,会出现错误。将基类Animal的age改为公有成员,编译即可通过。
(2) 将Animal的缺省构造函数添加一个整型形参,并用其为age赋值。此时再
编译时,系统提示错误:error C2512: 'Animal' : no appropriate default constructor available。将dog的缺省构造函数也添加一个整型形参,并用其为基类构造函数传参,此时再编译,系统提示错误:error C2512: 'Dog' : no appropriate default constructor available。在main函数中创建dog类的对象语句加上任意整型实参,编译即可通过。
(3) 分别在Animal和dog类构造函数、析构函数中增加显示语句,利用Debug
跟踪,观察构造函数、析构函数的执行情况。
(4) 编写程序声明一个车(vehicle)基类,由其派生出自行车(bicycle)、汽车
(motorcar)类,注意派生时将基类vehicle设置为虚基类。从bicycle和motorcar派生出摩托车(motorcycle)类,在main中用motorcycle的对象调用基类vehicle的公有成员函数。
(5) 编译成功后,将vehicle设置为非虚基类,再编译一次,此时系统报错,编
译不成功。这是因为若不把vehicle设置为虚基类,其成员在motorcycle中就会出现二义性。
共分享92篇相关文档