看完C++中虚继承的作用及底层实现原理,文中说虚继承是通过虚基类指针实现的,此处验证一下其成员分布。
#include <iostream>
using namespace std;
class A {
public:
virtual void fun() {};
int a;
};
class B : virtual public A {
public:
virtual void fun1() {};
int b;
};
class C : virtual public A {
public:
virtual void fun2() {};
int c;
};
class D : public B, public C{
public:
virtual void fun3() {};
int d;
};
int main() {
A a;
B b;
C c;
D d;
d.B::a = 1;
cout << d.a << endl;
cout << d.C::a << endl;
d.C::a = 2;
cout << d.a << endl;
cout << d.B::a << endl;
cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << " " << sizeof(D) << endl;
return 0;
}
/*
输出结果如下:
1
1
2
2
16 40 40 72
*/
从实验结果可以看出,B,C,D类共享同一个基类A,修改任意一个中的A的成员,其他中A的成员也会改变。
B和C通过虚基类指针指向同一个基类A,D则直接继承基类A。
vs2019内存变量d成员如下: