对虚继承(不是虚函数继承)的理解

虚继承

利用关键字virtual限定继承关系例如:

class A :virtual public B{
...
};

虚继承的好处

当继承关系很复杂时,保证只有一份基类的数据。例如:

#include <iostream>
using namespace std;
class A
{
    int a=10;
public:
    A(){ cout<<"A"<<endl;}
};
class B
{
public:
    B() { cout<<"B"<<endl;}
};
class B1: virtual public B, virtual public A{
public :
    B1(int i){ cout<<"B1"<<endl;}
};
class B2: public A,virtual public B{
public :
    B2(int i){ cout<<"B2"<<endl;}
};
class D:public B1, public B2{
public:
    D(int m,int n):B1(m), B2(n){cout<<"D"<<endl;}
    A a;
};
int main()
{
    D d(1,2);
   return 0;
  }

输出为:

B
A
B1
A
B2
A
D

关键点在于class B2: public A,virtual public B所以构造B2时采用的是虚继承,所以不会再次构造B,不会输出“B”,可以与A做对比。

最后输出两个A与D,构造一个类时,会先构造它的成员,再执行它的构造函数。

Guess you like

Origin blog.csdn.net/weixin_41065922/article/details/119794216