#include <iostream>
using namespace std;
// 虚继承: 解决多继承中的二义性 ===> 仅适用于有公共基类的情况
// 继承之前添加一个关键字: virtual ===> 会为派生类添加一个 虚基类表(vbptr) 指针
// 虚继承的情况下派生类中的对象排序 : 虚基类指针排列在最前面
// 1、排列非虚继承的类成员
// 2、vbptr
// 3、自己的成员
// 4、虚基类成员
class Parent
{
public:
int a;
};
class Parent1 :virtual public Parent
{
public:
int b;
};
class Parent2 :virtual public Parent
{
public:
int c;
};
class Child : public Parent1,public Parent2
{
public:
int d;
};
// 多继承中的二义性: 通过类名 和 域解析符解决
int main()
{
cout << sizeof(Parent1) << endl;
Child c1;
c1.Parent1::a = 1;
c1.Parent2::a = 5;
c1.b = 2;
c1.c = 3;
c1.d = 4;
return 0;
}
虚继承
最新推荐文章于 2019-08-08 16:24:00 发布