虚继承

虚继承的必要性

这里写图片描述
解决菱形继承带来的数据冗余和二义性。由于B 和C都继承了类A,那么B和C中就各有一份A的内容,而D又分别继承了B和C,那么D中就有两份a,造成了数据冗余,而且在访问_a成员时,就会有二义性的产生,指向不明。所以为了解决这种问题引出了虚继承

什么是虚继承

虚继承就是在B和C在继承A时加上关键字virtual就是虚继承了,

#include<iostream>
using namespace std;
class A{
public:
    int _a;
};
class B :virtual public A{
public:
    int _b;
};
class C :virtual public A{
public:
    int _c;
};
class D :public B,public C{
public:
    int _d;
};
int main(){
    D d;
    d._a=1;
    d._b = 2;
    d._c = 3;
    d._d = 4;
    cout<<sizeof(d)<<endl;//   20  //虚继承后大小变为24
    system("pause");
    return 0;
}

为什么虚继承后D的大小反而变量大了,这岂不是不能达到解决数据冗余的效果了?
这里写图片描述,按照结果来看是不是觉得并没有达到解决数据冗余的问题,这是因为A中的数据少,如果A中的成员很多,空间很大,那么两个指针的作用就很大了,可以省略很多空间的开销。

猜你喜欢

转载自blog.csdn.net/cx2479750196/article/details/80090750
今日推荐