首页 > 编程 > C++ > 正文

c++ 之菱形继承

2019-11-08 19:53:09
字体:
来源:转载
供稿:网友

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的内容放在公共位置处


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选