- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(C++语言程序的设计)第19讲 继承2.ppt
2018-5-24
1
HZAU信息学院计算机系
C++语言程序设计
第19讲 继承2
2
多重继承
前面所介绍的继承都只是单继承
包括多层派生──派生类的派生类。
客观事物有时是“一体多能”、“一身兼任数职”的。这意味着派生类从多个基类继承而来。
在职攻读研究生学位的教师(既是教师又是研究生);
优秀学生兼任学生辅导员(既是学生又兼任教师工作);
专业技术人员兼任管理工作(既是员工又是管理者);
打印复印一体机(既是打印机,又是复印机,还可能是电话机、传真机和扫描仪);
手机(是电话机、MP3播放器、MP4播放器、照相机、电视机、收音机、录音机、U盘、闹钟和游戏机等)。
3
多重继承
按继承的设计模式,对于这种“一身兼任数职”的事物应该有多个基类──这就是需要多重继承的原因。
下面简要说明
多重继承的语法;
多重继承所带来的新问题(成员冲突和冗余);
如何解决新问题。
语法格式
class 派生类名 : 继承方式 基类1,继承方式 基类2,…
{ // 派生类新增加的属性和行为,重载或覆盖基类的成员函数
};
4
多继承时的构造函数
派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数)
{
本类成员初始化赋值语句;
};
5
构造函数的调用顺序
1.调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。
2.派生类的构造函数体中的内容。
8
class C: public B2, public B1, public B3
{
public: //派生类的公有成员
C(int a, int b): B1(a), B2(b)
{ coutconstructing Cendl;}
};
int main()
{ C obj(1,2); return 0; }
运行结果:
constructing B2 2
constructing B1 1
constructing B3 *
constructing C
8
9
继承时的析构函数
析构函数也不被继承,派生类自行声明
声明方法与一般(无继承关系时)类的析构函数相同。
不需要显式地调用基类的析构函数,系统会自动隐式调用。
析构函数的调用次序与构造函数相反。
10
例19-2 派生类析构函数举例
#include iostream
using namespace std;
class B1 //基类B1声明
{ public:
B1(int i) {coutconstructing B1 iendl;}
~B1() {coutdestructing B1 endl;}
};
class B2 //基类B2声明
{public:
B2(int j) {coutconstructing B2 jendl;}
~B2() {coutdestructing B2 endl;}
};
class B3 //基类B3声明
{public:
B3(){coutconstructing B3 *endl;}
~B3() {coutdestructing B3 endl;}
};
11
class C: public B2, public B1, public B3
{public:
C(int a, int b): B1(a), B2(b)
{coutconstructing Cendl;}
~C()
{coutdestructing C endl;}
};
int main()
{ C obj(1,2); return 0; }
11
12
例19-2 运行结果
constructing B2 2
constructing B1 1
constructing B3 *
constructing C
destructing C
destructing B3
destructing B1
destructing B2
13
同名隐藏规则
当派生类与基类中有相同成员时:
若未强行指名,则通过派生类对象使用的是派生类中的同名成员。
如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。
14
例19-3 多继承同名隐藏举例
#include iostream
using namespace std;
class B1 //声明基类B1
{ public: //外部接口
int nV;
void fun() {coutMember of B1endl;}
};
class B2 //声明基类B2
{ public: //外部接口
int nV;
void fun(){coutMember of B
您可能关注的文档
- ( 市政工程计量与计价)第一章 工程造价的基本相关知识.ppt
- ( 市政工程计量和 与计价)第七章 土石方工程.ppt
- ( 市政工程计量和 与计价)第三章 定额.ppt
- ( 市政工程计量和 与计价)第九章桥梁工程.ppt
- ( 市政工程计量和 与计价)第二章 工程计量.ppt
- ( 市政工程计量和 与计价)第五章 工程量.ppt
- ( 市政工程计量和 与计价)第八章 排水工程.ppt
- ( 市政工程计量和 与计价)第六章土石方工程.ppt
- ( 建筑节能工程和 与施工)第10章 配电和 与照明节能工程.ppt
- ( 建筑节能工程和 与施工)第11章 监测和 与控制节能工程.ppt
- (C++语言程序的设计)第20讲 输入输出流.ppt
- (C++语言程序设计)第01讲 基础相关知识.ppt
- (C++语言程序设计)第14讲 结构化设计基本方法.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)320滑梯包拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A320EDP拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A320HPTACCV拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A320VSV作动筒拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A320燃油泵拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A32TCAS天线的拆装.ppt
- (CBT考试相关复习材料重要部件拆装A320机型)A32气象雷达天线的拆装.ppt
文档评论(0)