带虚继承的类对象模型

文章目录

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

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

相关推荐
KyollBM18 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
feiyangqingyun30 分钟前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师32 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
成工小白2 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法2 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json
SunkingYang2 小时前
C++中如何遍历map?
c++·stl·map·遍历·方法
Andrew_Xzw2 小时前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
库库的里昂2 小时前
【C++从练气到飞升】03---构造函数和析构函数
开发语言·c++
momo卡2 小时前
MinGW-w64的安装详细步骤(c_c++的编译器gcc、g++的windows版,win10、win11真实可用)
c语言·c++·windows
凤年徐5 小时前
【数据结构初阶】单链表
c语言·开发语言·数据结构·c++·经验分享·笔记·链表