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的内容放在公共位置处
新闻热点
疑难解答
图片精选