第十三章 类继承(3)派生类和基类之间的特殊关系

作者 : 开心源码 本文共778个字,预计阅读时间需要2分钟 发布时间: 2022-05-13 共139人阅读

(三)派生类和基类之间的特殊关系

(1)派生类对象可以使用基类的方法,条件是方法不是私有的(公有的或者者是保护的)

(2)基类指针可以在不进行显式类型转换的条件下指向派生类对象,基类引用也可以不进行显式类型转换而引用派生类对象。但是基类的指针或者引用只能够调用基类的方法,不能调用派生类的方法。

这一点是符合逻辑的,比方我有一个函数,它的参数是基类对象的指针或者引用,而假如我要使用这个函数解决基类的派生类对象,那么这是允许的。为什么呢?这是由于从范畴上讲,派生类应该是属于基类的,比方从树中派生出苹果树,那么苹果树一定是属于树的。我有一个函数是解决树的,比方这个函数是种树函数,那么不论是什么树,应该都可以使用这个函数,我使用树的指针指向苹果树,从而用树的方法解决苹果树,这是没有任何疑问的,也符合我们对世界的认知。

基类指针或者引用可以使用派生类指针或者引用,但是反过来是不可以的,比方,我不能派生类的指针指向基类对象

(3) Is-a关系

公有继承中,基类和派生类的关系是is a的关系,比方从水果中派生出香蕉,香蕉是一种水果就是is-a的关系。此外还有许多其余的关系,比方has a关系,午餐有香蕉,但午餐不是香蕉,因而,从香蕉中派生出午餐是不合适的,此时最好是将香蕉的对象作为一个数据成员放在午餐类中,产生has a的关系。

(4)基类指针或者引用的兼容性会带来少量有趣的结果,比方我们可以用派生类的对象来初始化基类的对象,此时会调用基类的复制构造函数,将派生类中的基类部分复制给基类对象;同样,也可以将派生类对象赋值给基类对象,这会调用基类的赋值运算符,从而将派生类对象的基类部分赋值给基类对象。这两个特点的起因归根结底还是由于基类引用可以指向派生类对象,导致二者的复制构造函数和赋值运算符原本使用的是基类的const引用,结果使用了派生类的const引用了。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 第十三章 类继承(3)派生类和基类之间的特殊关系

发表回复