菱形继承
来源:互联网 发布:java accept 编辑:程序博客网 时间:2024/04/27 09:49
菱形继承
编辑词条分享
考虑这种情况:
class CA{};
class CB : public CA{};
class CC : public CA{};
这时我们需要一个CD类,它需要同时继承CB和CC。
问题就出现了。
如果我们这样写:
class CD : public CB, public CC{};
那么我们在构造一个CD类的时候,
其结果如下图一所示:
图一
即:一个CD类中有两个CA(它的超类的对象)
这样的情况是不合理的。此时会出现模糊调用的现象。
如何避免这种现象呢?
虚继承就有了用武之地。
我们需要改写CB和CC的继承方式。
class CB : public virtuel CA{};
class CC : public virtual CA{};
其他无需修改。此时我们构造一个CD类的时候,
其顺序如下:
开始构造CD类,
先构造一个超类CA,然后构造CB,
在构造CC(此时不会构造CC的父类CA)
这样一来,
CD类对象中包含的CB和CC将共享同一份CA对象。
如图二所示图二
这时就不会出现模糊调用的现象了。
-----------------------------------华丽丽的分割线--------------------------------------
这个就是C++臭名昭著的多继承。
在JAVA中根本不会出现这种情况,
如果必须使用菱形继承的时候无比使用虚拟继承。
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- 菱形继承
- c++中不用循环计算求和等的方法
- What are the clusters? What are their advantages?
- IDispatch接口原理与应用
- Cycle Count Interface Table - MTL_CC_ENTRIES_INTERFACE
- VS2008 编译SQLite得到lib dll
- 菱形继承
- PE文件和COFF文件格式分析--概述
- QNX驱动开发——SD卡SD模式开发实录
- Eclipse不能编译成功
- 开博感言
- java 中的 final 关键字 和 static 用法
- Exception in Oracle
- EFSL文件系统移植记录
- GM8125串口拓展应用