C++菱形继承面试题

来源:互联网 发布:无线网速监控软件 编辑:程序博客网 时间:2024/06/11 02:56

问题:1.虚拟继承的作用

            2.底层的工作原理




1.作用:

#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;};void Test(){DD d;d.BB::_aa = 0;d.CC::_aa = 1;d._bb = 2;d._cc = 3;d._dd = 4;cout << sizeof(BB) << endl;//12}int main(){Test();return 0;}
在这个代码中DD中有了两份AA成员,菱形继承存在二义性和数据冗余问题


因此引进了虚拟继承解决了菱形继承的二义性和数据冗余



2.原理



这是菱形继承的内存图

代码为1中的代码

虚拟继承 加virtual

代码如下:

#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;};void Test(){DD d;d.BB::_aa = 0;d.CC::_aa = 1;d._bb = 2;d._cc = 3;d._dd = 4;cout << sizeof(BB) << endl;//12}int main(){Test();return 0;}
内存图如下:



0 0
原创粉丝点击