文章目录
-
- 1、代码
- [2、 单个虚继承](#2、 单个虚继承)
- 3、vbptr是什么
- 4、虚继承的多继承
1、代码
cpp
#include<iostream>
using namespace std;
class Base {
public:
int ma;
};
class Derive1 :virtual public Base
{
public:
int mb;
};
class Derive2 :public Base
{
public:
int mc;
};
class Derive3 :public Derive1 , public Derive2
{
public:
int md;
};
int main()
{
return 0;
}
2、 单个虚继承
Derive1 为单个基类,且为虚继承,类对象模型的原则是:
1、先按照常规布局分布内存
2、将虚基类整体移到最下面,在原来虚基类的地方加上vbptr
cpp
1、按照常规布局先画出类对象模型
class Derive1 size(8):
+---
0 | +--- (base class Base)
0 | | ma
| +---
4 | mb
+---
2、将虚基类整体下移,在原来的位置加上vbptr
class Derive1 size(12):
+---
0 | {vbptr}
4 | mb
+---
+--- (virtual base Base)
8 | ma
+---
Derive1::$vbtable@:
0 | 0
1 | 8 (Derive1d(Derive1+0)Base)
vbi: class offset o.vbptr o.vbte fVtorDisp
Base 8 0 4 0
3、vbptr是什么
vbptr是虚基类表,里面存放的是vbptr指针和虚基类的成员变量相对于类对象的偏移量
4、虚继承的多继承
虚继承的优先级比普通继承的优先级高