首页 > 学院 > 开发设计 > 正文

研究虚表(探索多态的原理)和菱形虚拟继承

2019-11-08 20:11:33
字体:
来源:转载
供稿:网友

菱形继承也称钻石继承,具体模型如下:

菱形继承代码段如下:

#include<iostream>using namespace std;class AA{public: int _a;};class BB:public AA{public: int _b;};class CC:public AA{public: int _c;};class DD:public BB, public CC{public: int _d;};int main(){ AA a; BB b; CC c; DD d; cout<<sizeof(a)<<endl; cout<<sizeof(b)<<endl; cout<<sizeof(c)<<endl; cout<<sizeof(d)<<endl; system("pause"); return 0;}

运行结果如下:

但由于菱形继承仍有两大缺点:二义性与数据冗余,所以由此我们引进菱形虚拟继承来完善这两点

#include<iostream>using namespace std;class AA{public: int _a;};class BB:virtual public AA{public: int _b;};class CC:virtual public AA{public: int _c;};class DD:public BB, public CC{public: int _d;};int main(){

 AA a; BB b; CC c; DD d; cout<<sizeof(a)<<endl; cout<<sizeof(b)<<endl; cout<<sizeof(c)<<endl; cout<<sizeof(d)<<endl; system("pause"); return 0;}

运行结果如下:

运行结果反而增大了,这似乎出乎我们的意料,但其实不然,这是因为虚拟继承需要额外占用八个字节,出现这样的原因是我们的成员过小,使节省空间这个目的没有明确的表现出来。

菱形虚拟继承模型如下:


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