实验四 继承与派生 一、实验目的 1、学习定义和使用类的...
实验四 继承与派生 一、实验目的 1、学习定义和使用类的继承关系,定义派生类。 2、熟悉不同继承方式下对基类成员的访问控制。 3、学习利用虚基类解决二义性问题。 4、类的组合的练习。 5、通过上机练习搞清有关继承的基本知识和相关概念。 (1)基类和派生类的关系。 (2)派生类的定义和派生类构造函数的定义方法。 (3)基类成员在不同继承方式下在派生类中的访问权限。 6、通过上机搞清子类型和赋值兼容规则。真正理解“白狗就是狗”的概念。 7、了解多继承的特点和二义性出现的情况以及虚基类。 二、实验任务 1、定义一个基类Animal,有私有整型成员变量age。构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题?把age改为什么访问权限的就不会有问题了?编程试试看。分别在两个类的构造函数和析构函数中用cout输出不同的提示信息,在主函数中定义派生类的对象,观察构造函数和析构函数的执行情况。 2、定义一个Shape基类,包括整型变量的变量成员x,y,来表示位置,定义带参的构造函数可以初始化x,y,再由此定义出派生类;矩形类Rect和圆类Circle,Rect类增加宽和高w,h两个变量,Circle类增加半径r,分别定义两个派生类的构造函数,可以初始化各自变量(包括基类成员)。 3、编写一个在职研究生相关数据输入和显示程序。 请按下列要求编程。 (1)构造类研究生类数据有学号、姓名(char name[20])、性别(char sex)、年龄(int age)、班级号(int classNum)和期末总分(double score)。 有两个公有成员函数,一个是设置研究生的姓名、性别、年龄和班级号和期末总分的值:void SetValue(char* n, char _sex, int a, int classN, double s);另一个是显示输出函数void display();显示 研究生 姓名、性别、年龄 和班级号和期末总分 。 (2)在职人员数据有职工号、姓名(char name[20])、职称(int level)和部门(int department)。 有两个公有成员函数,一个是设置 在职人员的姓名、职称和部门的值函数:void SetValue(char* n, int level, int d);另一个是显示输出函数void display();显示在职人员的姓名、 职称和部门。 注*: 职称:从1到8 部门:1到3 (3)构造在职研究生类,该类是研究生类和在职人员的派生类。 有两个公有成员函数,一个是设置在职研究生的姓名、性别、年龄和班级号、期末总分、职称和部门的值:void SetValueExtra(char* n, char _sex, int a, int classN, double s, int level, int d);另一个是显示输出函数void display();显示 在职研究生的姓名、性别、年龄和班级号、期末总分、职称和部门 。 在主函数中,分别定义一个研究生和一个在职人员,给定相关数据,并再将输入数据输出显示在屏幕上。 再定义一个在职研究生对象,给定相关数据,并再将输入数据输出显示在屏幕上。 按上述要求编写出程序并上机调试。 附加题(加分): 4、P164题5-11 编写程序,定义机动车类Vehicle,包括的数据成员有出厂日期和售价,并定义成员函数可以设置这些数据成员,再定义Print()成员函数输出成员变量内容,然后定义Car类和Trunk类,分别扩展各自的内容,如Car类增加乘客数量,Trunk类增加载重吨数,并都可以通过构造函数初始化各自成员变量和其基类成员,最后都能输出相关信息。