带虚继承的类对象模型

文章目录

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

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

相关推荐
邪修king9 分钟前
Re:Linux 系统篇(十七):进程篇(六):环境变量深度解析|命令行参数、环境变量表、4 种获取方式与继承机制万字详解
linux·服务器·c++
张小姐的猫35 分钟前
【C++开发脚手架】 —— Jsoncpp上手
java·linux·开发语言·网络·c++·tcp/ip·udp
OPEN-F1 小时前
C++并发编程:异步任务与线程池实战
开发语言·c++·算法
水饺编程2 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio
恋恋西风9 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx9 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_10 小时前
C++(22)——类型转换和IO流
开发语言·c++
青梅味猪大肠13 小时前
【深入浅出C++】为什么虚表指针可以解决菱形继承
开发语言·c++
Lhan.zzZ14 小时前
QML 组件库:VS2022 + Qt 静态库方案
开发语言·c++·qt·visual studio
一木 之林16 小时前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++