c++ 之菱形继承

来源:互联网 发布:淘宝店现在生意怎么样 编辑:程序博客网 时间:2024/04/29 08:39

1.什么是菱形继承

   俩个子类继承同一个父类,而又有子类同时继承这俩个子类,如下图所示;

   

#include <iostream>#include <windows.h>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;    system("pause");return 0;}



2.菱形继承带来二义性和数据冗余的问题

菱形继承对象模型


3.虚继承解决菱形继承带来的问题


#include <iostream>#include <windows.h>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;    system("pause");return 0;}



虚继承对象模型


在这里,BB,CC保存的不再是AA的内容,而是偏移地址,把AA的内容放在公共位置处

0 0
原创粉丝点击