虚表:存放存放偏移量地址的
虚基表:存放偏移量的
接下来我们通过一个简单的案例来讲述一下虚基表的作用
#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,这个位置实际上存的是虚表和虚基表的相对位置