带虚继承的类对象模型

文章目录

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

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

相关推荐
A星空1231 分钟前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫23 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙33 分钟前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米60144 分钟前
C++顺序表和vector
开发语言·c++·算法
独望漫天星辰1 小时前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
王老师青少年编程2 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
凡人叶枫2 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CSDN_RTKLIB2 小时前
使用三方库头文件未使用导出符号情景
c++
rainbow68894 小时前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊4 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展