带虚继承的类对象模型

文章目录

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、虚继承的多继承

虚继承的优先级比普通继承的优先级高

相关推荐
*TQK*2 小时前
简要介绍C语言与c++共有的数学函数
c语言·c++·编程知识点
一期一祈^5 小时前
C++SLT(三)——list
开发语言·c++·list
tan180°6 小时前
DS图(中)(19)
开发语言·数据结构·c++·算法·深度优先·图论
CodeClimb6 小时前
【华为OD-E卷 - 115 数组组成的最小数字 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb6 小时前
【华为OD-E卷 - 114 找最小数 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
小姚也要变强6 小时前
结构体排序 C++ 蓝桥杯
数据结构·c++·算法·蓝桥杯
余辉zmh6 小时前
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(三)
数据结构·c++·算法·leetcode·贪心算法
小姚也要变强6 小时前
后缀表达式 C++ 蓝桥杯 栈
数据结构·c++·算法·蓝桥杯
2401_858286117 小时前
C32.【C++ Cont】静态实现双向链表及STL库的list
开发语言·c++·链表
重生之我在20年代敲代码7 小时前
【C++】STL——list的使用
开发语言·c++