c++pdf课件第16章多重继承

上传人:w****i 文档编号:106195335 上传时间:2019-10-14 格式:PDF 页数:21 大小:725.10KB
返回 下载 相关 举报
c++pdf课件第16章多重继承_第1页
第1页 / 共21页
c++pdf课件第16章多重继承_第2页
第2页 / 共21页
c++pdf课件第16章多重继承_第3页
第3页 / 共21页
c++pdf课件第16章多重继承_第4页
第4页 / 共21页
c++pdf课件第16章多重继承_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《c++pdf课件第16章多重继承》由会员分享,可在线阅读,更多相关《c++pdf课件第16章多重继承(21页珍藏版)》请在金锄头文库上搜索。

1、下载 下载 第1 6章多 重 继 承 多重继承M I(multiple inheritance)的基本概念听起来非常简单。 可以通过继承多个基类来生成一个新类。这种语法正如料想的那样,只要继承图简单, M I也不复杂。然而M I会引入许多二义性和奇异的情况,它贯穿于本章。现在首先给出关于本 主题概述。 16.1 概述 在C + +以前,最为成功的面向对象语言是 S m a l l t a l k。S m a l l t a l k从开始建立就成为面向对象 的语言。就面向对象来说,S m a l l t a l k是“纯种的”,而C + +则是“混血的” ,这是因为C + +是在C 语言上建立的

2、。S m a l l t a l k的一个设计原则是:所有的类应从一个单一层次上进行派生,它们根 植于一个基类(称之为O b j e c t,它是基于对象层次的模式) ,在S m a l l t a l k中不从一个已生成类中 进行继承就不能生成一个新类,所以在创建新类之前必须学习 S m a l l t a l k类库,这就是为什么得 花相当长的时间才能成为S m a l l t a l k熟手的原因。所以Smalltalk class 类层次总是一棵简单的单 一树。 S m a l l t a l k的类有相当部分是共同的,例如其中 O b j e c t的行为和特性必然是相同的,所以几

3、乎不会碰上需要继承多个基类的情况。然而只要我们想一想, C + +可以创建任意个继承树,因 而对C + +语言的逻辑完备性来说,它必须支持多个类的结合,由此要求有多重继承性。 然而,这并不是多重继承必须存在的令人信服的理由。过去有,现在仍然有关于 M I是C + + 精华的否定意见。AT/ upcast 这样,所有函数的调用包括d e l e t e都通过多态的m p来完成,同样对新接口函数g ( )的调用也通过 m p。下面是程序的输出: 原先的库函数A ( )和B ( )仍然可以工作(若新的v ( )调用它的基类版本) 。析构函数现在是虚 的并表现了正确的行为。 虽然这是一个散乱的例子,但

4、它确实可以在实际中出现,同时很好地说明了多重继承在何 处是必要的:我们必须能够向上映射到两个基类。 16.9 小结 除C + +之外,其他O O P语言都不支持多重继承,这是由于针对O O P来说C + +是一个“混血” 版,它不能像S m a l l t a l k那样把类强制安排成一个单一完整的类层次。 C + +支持许多不同形式的 继承树,有时需要结合两个或更多的继承树接口形成一个新类。 假若在类层次中没有出现“菱形”形状, M I是相当简单的,尽管必须解决在基类中相同 的函数标识。假若出现“菱形”形状,我们必须处理由于引入虚基类导致的子对象重叠问题。 358C + +编程思想 下载 这

5、不仅增加了混乱而且使底层变得更为复杂和缺乏效率。多重继承被 Zack Urlocker称为“九十 年代的g o t o” ,因为它确实像g o t o。在通常编程开发时,应避免使用多重继承,只是在某一时候 它才变得非常有用。M I是C + +中“次要的”但更为高级的特性,它被设计用于处理特定的情况。 如果我们发现经常使用它,应该调查一下使用它的原因,应基于 O c c a m所提出的简单完美性原 则(O c c a ms Razor) “我必须向上映射到所有基类吗” ,如果我们的回答是否定的,则用嵌 入所有基类实例的方法会更容易,而不必使用向上映射。 16.10 练习 1. 本练习会使我们一步

6、一步地穿过 M I陷阱。创建一个含有单个 i n t参数的构造函数和返回 为v o i d型的无参数成员函数f ( )的基类X。从X派生出Y和Z,为Y和Z各创建一个单个i n t参数的构 造函数。通过多重继承从Y和Z中派生出A。生成一个类A的对象并为对象调用f ( )。以明显无二 义性的方式解决这个问题。 2. 创建一个指向X的指针p x,将类型A的对象的地址在它被创建前赋予 p x。注意虚基类的 使用问题。现在修改X,使得这时不必再在A中为X调用构造函数。 3. 移去f ( )的明显无二义性说明,观察能否通过p x调用f ( )。对其跟踪以便观察哪个函数被调 用。注意这个问题以在一个类层次中调用正确的函数。 第16章 多 重 继 承359 下载

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号