实验3 继承与派生 (4学时) 实验目的:
1.学会从现有类派生出新类的方式。
2.了解基类成员在派生类中的访问控制。
3.熟悉派生类中构造函数和析构函数的调用顺序。 4.掌握虚基类的作用和用法。
实验内容:
1.仔细阅读下列程序,写出运行结果。
#include
A(int m){ cout<<\~A(){ cout<<\}; class B { public:
B(int n){ cout<<\B(){cout<<\};
class C: public B,public A { public:
C(int a,int b,int c,int d,int e):A(b),B(e),bb(c),aa(d) { cout<<\~C(){ cout<<\private: A aa; B bb; };
int main()
{ C cc(1,2,3,4,5); }
分析:注意派生类和基类中构造函数和析构函数的调用顺序。 程序输出结果如下:
B constructor:5 A constructor:2
A constructor:4 B constructor:3 C constructor:1 C destructor B destructor
A destructor A destructor B destructor
2.定义一个Person类,数据成员包含能够保存姓名的变量name,其中有能够输出姓名的成员函数PrintName()。
现从Person类派生出Worker 类,该类包括数据成员number用来记录对象的工号、sex用来记录对象的性别、age用来记录对象年龄、add用来记录对象的家庭住址;包括函数成员printinfor()用来输出对象的个人信息。 要求:
⑴ 构造Worker类对象输出该对象的工号、年龄、家庭住址等信息。 ⑵ 在Worker类的printinfor()成员函数中须调用Person类的成员函数PrintName()。
输出结果如:丁一 10127 男 28 长江路369号
3.定义基类Student,含有私有数据成员num、name、sex,公有成员函数get_value()用于输入数据,display()用于输出数据。定义派生类Student1(从基类公有继承),含有私有数据成员age、addr,设计派生类的成员函数,使程序运行时输入num、name、sex、age、addr的值,程序应输出以上5个数据的值。 4.修改上面的程序,基类数据成员为保护类型,派生类从基类保护继承,实现输入和输出5个数据成员的值。
5.分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:①在两个基类中都包含一部分相同名字的数据成员name(姓名),age(年龄)和成员函数display()。②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre(教师兼干部)中还包含数据成员wages(工资)。③在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、职称,然后再用cout语句输出职务与工资。
参考答案:
2. #include
string name; public:
Person(string nm){name=nm;}
void PrintName(){cout << \};
class Worker:public Person { private:
string number; string sex; int age;
string addr; public:
Worker(string nm,string num,string sx,int ag,string add):Person(nm) {number=num; sex=sx; age=ag; addr=add; }
void printinfor(){ PrintName();
cout << \ cout << \ cout << \ cout << \ } };
int main(){
Worker a(\丁一\男\长江路369号\a.printinfor(); return 0; }
3. #include
string number; string name; string sex; public:
void get_value(string num,string nm,string sx) {
number=num; name=nm; sex=sx;
}
void display(){
cout << \cout << \cout << \} };
class Student1:public Student { private: int age;
string addr; public:
void get_value1(string num,string nm,string sx,int ag,string add) {
get_value(num,nm,sx); age=ag; addr=add; }
void display1(){ display();
cout << \ cout << \} };
int main(){ Student1 a;
a.get_value1(\丁一\男\长江路369号\a.display1(); return 0; }
4. #include
string number; string name; string sex; public:
void get_value(string num,string nm,string sx) {
number=num; name=nm; sex=sx; }
void display(){
cout << \cout << \cout << \} };
class Student1:protected Student { private: int age;
string addr; public:
void get_value1(string num,string nm,string sx,int ag,string add) {
get_value(num,nm,sx); age=ag; addr=add; }
void display1(){ display();
cout << \ cout << \} };
int main(){ Student1 a;
a.get_value1(\丁一\男\长江路369号\a.display1(); return 0; }

