Bootstrap

c++中虚继承中的虚基表

虚表:存放存放偏移量地址的

虚基表:存放偏移量的

接下来我们通过一个简单的案例来讲述一下虚基表的作用

#include<iostream>
using namespace std;

class A
{
public:
	int _a;
};

class B:virtual public A    //虚继承了A
{
public:
	int _b;
};

class C:virtual public A    //虚继承了A
{
public:
	int _c;
};

class D:public B,public C    //多继承,继承了B,C
{
public:
	int _d;
};

int main()
{
	D d;
	d._a = 1;
	d._b = 2;
	d._c = 3;
	d._d = 4;
	return 0;
}

通过vs2022的监视窗口我们不能很好的观察到虚继承和普通继承的区别 

 所以我们通过vs2022的内存窗口来观察虚基表

将这两个指针的地址输入,发现每个地址都有一个数,这个数就是虚基表指针相对于虚继承成员的偏移量

所以我们可以得出结论

虚基表就是用来存放相对于虚继承成员偏移量的,这样当我们使虚继承时候,想要使用虚继承下来的变量时候,就会使用虚基表来找到其中的成员

不过我们发现偏移量不是存在虚基表的首位置,首位置是00000000,这个位置实际上存的是虚表和虚基表的相对位置

;