第5章继承与派生Word文档格式.docx
- 文档编号:21999146
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:262.98KB
第5章继承与派生Word文档格式.docx
《第5章继承与派生Word文档格式.docx》由会员分享,可在线阅读,更多相关《第5章继承与派生Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
5.5派生类的构造函数和析构函数
5.5.1简单的派生类的构造函数
图5.10
图5.11
5.5.2有子对象的派生类的构造函数
图5.12
5.5.3多层派生时的构造函数
图5.13
5.5.4派生类构造函数的特殊形式
5.5.5派生类的析构函数
5.6多重继承
5.6.1声明多重继承的方法
5.6.2多重继承派生类的构造函数
5.6.3多重继承引起的二义性问题
图5.14
图5.15
图5.16
图5.17
图5.18
图5.19
图5.20
5.6.4虚基类
1.虚基类的作用
图5.21
图5.22
图5.23
图5.24
2.虚基类的初始化
图5.25
3.虚基类的简单应用举例
5.7基类与派生类的转换
图5.26
图5.27
5.8继承与组合
5.9继承在软件开发中的重要意义
习题
1.将例5.1的程序片段补充和改写成一个完整、正确的程序,用公用继承方式。
在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。
2.将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。
3.将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。
在程序中应包括输入数据的函数。
4.修改例5.3的程序,改为用公用继承方式。
上机调试程序,使之能正确运行并得到正确的结果。
对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。
5.有以下程序结构,请分析访问属性。
classA//A为基类
{public:
voidf1();
inti;
protected:
voidf2();
intj;
private:
intk;
};
classB:
publicA//B为A的公用派生类
voidf3();
intm;
private:
intn;
classC:
publicB//C为B的公用派生类
voidf4();
intp;
intmain()
{Aa1;
//a1是基类A的对象
Bb1;
//b1是派生类B的对象
Cc1;
//c1是派生类C的对象
return0;
}问:
(1)在main函数中能否用b1.i,b1.j和b1.k引用派生类B对象b1中基类A的成员?
(2)派生类B中的成员函数能否调用基类A中的成员函数f1和f2?
(3)派生类B中的成员函数能否引用基类A中的数据成员i,j,k?
(4)能否在main函数中用c1.i,c1.j,c1.k,c1.m,c1.n,c1.p引用基类A的成员i,j,k,派生类B的成员m,n,以及派生类C的成员p?
(5)能否在main函数中用c1.f1(),c1.f2(),c1.f3()和c1.f4()调用f1,f2,f3,f4成员函数?
(6)派生类C的成员函数f4能否调用基类A中的成员函数f1,f2和派生类中的成员函数f3?
6.有以下程序结构,请分析所有成员在各类的范围内的访问权限。
classA
voidf1();
protected:
voidf2();
inti;
publicA
voidf3();
intm;
protectedB
classD:
privateC
voidf5();
intp;
intq;
intmain()
Bb1;
Dd1;
7.有以下程序,请完成下面工作:
①阅读程序,写出运行时输出的结果。
②然后上机运行,验证结果是否正确。
③分析程序执行过程,尤其是调用构造函数的过程。
#include<
iostream>
usingnamespacestd;
A(){a=0;
b=0;
}
A(inti){a=i;
A(inti,intj){a=i;
b=j;
voiddisplay(){cout<
<
″a=″<
a<
″b=″<
b;
inta;
intb;
};
classB:
B(){c=0;
B(inti):
A(i){c=0;
B(inti,intj):
A(i,j){c=0;
B(inti,intj,intk):
A(i,j){c=k;
voiddisplay1()
{display();
cout<
″c=″<
c<
endl;
intc;
{Bb1;
Bb2
(1);
Bb3(1,3);
Bb4(1,3,5);
b1.display1();
b2.display1();
b3.display1();
b4.display1();
return0;
8.有以下程序,请完成下面工作:
③分析程序执行过程,尤其是调用构造函数和析构函数的过程。
A(){cout<
″constructingA″<
~A(){cout<
″destructingA″<
B(){cout<
″constructingB″<
~B(){cout<
″destructingB″<
classC:
publicB
C(){cout<
″constructingC″<
~C(){cout<
″destructingC″<
{Cc1;
9.分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。
要求:
①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。
③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
④在类体中声明成员函数,在类外定义成员函数。
⑤在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
10.将本章5.8节中的程序片段加以补充完善,成为一个完整的程序。
在程序中使用继承和组合。
在定义Professor类对象prof1时给出所有数据的初值,然后修改prof1的生日数据,最后输出prof1的全部最新数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 派生