- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 继承和派生 6.1派生类的概念 6.1.2 派生类的声明和继承方式 5.访问声明 类 D 从基类B私有派生,因而类D的派生类E不能访问间接基类 B 的所有成员,这种方法表达比较简洁。但有些时侯,这种”一刀切”的方法会带来问题。若希望类B的某几个成员还能被类E访问,而不是像现在这样全部变成类D的私有成员,让类E根本看不到。为了满足这种需要,C++提供了一种调节机制,称为访问声明,它使得 B 的某几个成员能被类 E 所访问。 * 第六章 继承和派生 6.1派生类的概念 6.1.2 派生类的声明和继承方式 访问声明的形式为: (1)基类类名::基类保护段或公有段数据成员; (2)基类类名::基类保护段或公有段成员函数名; * class B { int a; public: int b; void f(); }; class D : private B { int d; public: B::b; B::f; int c; }; 第六章 继承和派生 6.1派生类的概念 6.1.2 派生类的声明和继承方式 对访问声明的使用需要注意以下几点: ? (1)访问声明不能说明任何类型。 (2)访问声明仅用于派生类中恢复名字的访问权限,不允许在派生类中降低或提升基类成员的可访问性。 (3)对重载函数名的访问声明将调整基类中具有该名的所有函数的访问域。 * 第六章 继承和派生 6.1派生类的概念 6.1.3基类对象的初始化 1.类等级 下面是一个继承链中的类等级图示: ? * X Y Z 子类 Child 父类 Parent 祖先类 Ancestor 直接基类 间接基类 要在派生类中访问与派生类同名的基类成员,采用 类名::成员 的方式。(例6-12) 第六章 继承和派生 6.1派生类的概念 6.1.3基类对象的初始化 2. 基类对象的初始化 在 C++ 中,派生类构造函数的声明为: 派生类构造函数(变元表):基类(变元表),对象成员1(变元表),…,对象成员n(变元表) { … }; 构造函数执行时仍遵循先兄长(基类),再客人(对象成员),后自己(派生类)的顺序。另一方面,执行析构函数时,先执行派生类的析构函数,再执行基类的析构函数。(例6-13-16) * 第六章 继承和派生 6.2多继承 6.2.1多继承的概念 ? 至今所看到的例子中,派生类仅有一个直接基类,这称为单继承。但是一些类却代表两个或多个类的合成。例如,两用沙发,它是一个沙发,也是一张床,两用沙发应允许同时继承沙发和床的特征,即SleepSofa继承Bed和Sofa两个类,因此多继承是指一个派生类有两个或者两个以上的直接基类。(例6-17) * 第六章 继承和派生 6.2多继承 6.2.1多继承的概念 * Bed Sleep() Setweight() Sofa watchTV() Setweight() SleepSofa foldout () 两用沙发的类层次 第六章 继承和派生 6.2多继承 6.2.2虚基类? 1.虚基类的概念 ? 在 C++ 中,一个类不能被多次说明为一个派生类的直接基类,但可以不止一次地成为间接基类。这就导致了一些问题。为了方便说明,先介绍多继承的“类格”表示法。 ? 派生类及其基类可用一有向无环图( DAG )表示,其中的箭头表示“由派生而来”。类的 DAG 图常称为一个“类格”。 * 第六章 继承和派生 6.2多继承 6.2.2虚基类?? class L { public: int next; }; class A : public L { }; class B : public L { }; * class C : public A, public B { public: void f() { next = 0;} }; ? 第六章 继承和派生 6.2多继承 6.2.2虚基类? * L L A B C L的数据成员 A的数据成员 L的数据成员 B的数据成员 C的数据成员 第六章 继承和派生 6.2多继承 6.2.2虚基类? 当在多条继承路径上有一个公共的基类(如本例的 L ),在这些路径中的某几条路径汇合处(如本例中的 C ),这个公共基类就会产生多个实例。也就是说,如果L中有一个叫做next的成员,那么在C中就有两个叫做next的成员。那么,下面的代码在编译时就会引起二义性错误: C Obj; Obj.next = 0; 而这条使正确的:Obj.A::next = 0; * 第六章 继承和派生 6.2多继承 6.2.2虚基类? 如果只想保存这个基类的一个实例,可以将这个公共基类说明为虚拟基类或称虚基类。它仅是简单地将关键字virtual加到基类的描述上,例如改
您可能关注的文档
- 语音信号及单片机处理 教学课件 作者 吴黎明 主编 王桂棠 吴正光 副主编 第五章.ppt
- 连锁企业门店营运管理 教学课件 作者 胡启亮 06-项目六 门店卖场的规划与管理.ppt
- 语音信号及单片机处理 教学课件 作者 吴黎明 主编 王桂棠 吴正光 副主编 第一章.ppt
- 连锁企业门店营运管理 教学课件 作者 胡启亮 07-项目七 营业现场管理.ppt
- 连锁企业门店营运管理 教学课件 作者 胡启亮 08-项目八 门店促销活动的组织与实施.ppt
- 语音信号及单片机处理 教学课件 作者 吴黎明 主编 王桂棠 吴正光 副主编 目录.ppt
- 连锁企业门店营运管理 教学课件 作者 胡启亮 09-项目九 门店商品管理.ppt
- 连锁企业门店营运管理 教学课件 作者 胡启亮 10项目十 门店防损与安全管理.ppt
- 语音信号及单片机处理 教学课件 作者 吴黎明 主编 王桂棠 吴正光 副主编 语音信号封面.ppt
- 连锁企业门店营运管理(第二版) 教学课件 作者 胡启亮 霍文智 01-项目一 门店营运管理概述.ppt
- 民航安全检查 教学课件 作者 张晗 服务礼仪规范.ppt
- 质量管理学 教学课件 作者 宋明顺 第三章设计质量管理.ppt
- 民航机务职业英语口语 教学课件 作者 屈静 Unit Seven.ppt
- 民用航空法基础 教学课件 作者 赵旭望、秦永红 第8章.ppt
- 质量管理学 教学课件 作者 宋明顺 第一章质量管理概论.ppt
- 魔法培训学校——Flash动画制作实例教程 教学课件 作者 王琢 第9讲.ppt
- 配送管理 第2版 教学课件 作者 汝宜红 宋伯慧 主编 01.ppt
- 配送管理 第2版 教学课件 作者 汝宜红 宋伯慧 主编 02配送业务.ppt
- 珠算与点钞(第二版) 教学课件 作者 曹慧 第六章 点钞技术.ppt
- 资产评估学 教学课件 作者 于翠芳 第1章财务管理总论.ppt
文档评论(0)