菱形继承与菱形虚拟继承的相关问题
2017-02-16 01:54
351 查看
1.首先什么是菱形继承呢?
首先菱形继承是由多重继承衍生出来的,一个子类具有两个或以上直接 父类的继承关系
在DD的对象模型中存在两份AA成员,所以菱形继承会存在二义性与数据冗余的问题,而为了解决这个问题,推出了虚拟继承的方法
在虚拟继承中完美诠释了以时间换空间
的做法,开辟出8个字节存放指针,在其地址上保存自己需要偏移量,从而调用成员,达到解决菱形继承二义性和数据冗余的目的。
首先菱形继承是由多重继承衍生出来的,一个子类具有两个或以上直接 父类的继承关系
#include<iostream> using namespace std; class AA { public: int _aa; }; class BB: public AA { public: int _bb; }; class CC: public AA { public: int _cc; }; class DD:public BB,public CC { public: int _dd; }; int main() { DD d; d.BB::_aa = 0; d.CC::_aa = 1; d._bb = 2; d._cc = 3; d._dd = 4; return 0; }
在DD的对象模型中存在两份AA成员,所以菱形继承会存在二义性与数据冗余的问题,而为了解决这个问题,推出了虚拟继承的方法
#include<iostream> using namespace std; class AA { public: int _aa; }; class BB:virtual public AA { public: int _bb; }; class CC:virtual public AA { public: int _cc; }; class DD:public BB,public CC { public: int _dd; }; int main() { DD d; d.BB::_aa = 0; d.CC::_aa = 1; d._bb = 2; d._cc = 3; d._dd = 4; return 0; }
在虚拟继承中完美诠释了以时间换空间
的做法,开辟出8个字节存放指针,在其地址上保存自己需要偏移量,从而调用成员,达到解决菱形继承二义性和数据冗余的目的。
相关文章推荐
- 菱形继承(虚函数)->菱形虚拟继承(虚函数)->多态系列问题
- MFC中SDI,视类继承于CFormView引发的相关问题
- Java中关于构造函数继承的相关问题
- 【编程语言】如何解决菱形继承问题
- java多态-继承相关问题的探讨
- C++虚拟继承问题
- 多继承实现COM类中的"菱形问题" C++也有一样的菱形问题
- (转)继承的相关问题
- C++多重继承相关问题
- ASP.NET 虚拟目录继承根Web.Config的问题解决
- 无法处理内核页面请求的虚拟地址(相关问题讨论)
- 关于虚拟目录继承根Web.Config的问题解决办法
- 虚拟目录继承根Web.Config的问题解决(转)
- 虚拟目录继承根Web.Config的问题
- 菱形继承问题
- MFC中SDI,视类继承于CFormView引发的相关问题
- 虚拟环境XP不能访问Linux 相关服务问题总结 推荐
- C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承
- 关于虚拟目录继承根Web.Config的问题解决办法
- java/c++钻石问题(菱形继承问题) 虚继承