带虚继承的类对象模型

文章目录

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

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

相关推荐
SpiderPex13 分钟前
第十七届蓝桥杯 C++ B组-题目 (最新出炉 )
c++·职场和发展·蓝桥杯
炘爚27 分钟前
C++ 右值引用与程序优化
开发语言·c++
si莉亚43 分钟前
ROS2安装EVO工具包
linux·开发语言·c++·开源
智者知已应修善业1 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
良木生香1 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++
小此方1 小时前
Re:从零开始的 C++ 进阶篇(三)彻底搞懂 C++ 多态:虚函数、虚表与动态绑定的底层原理
c++
忘梓.1 小时前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u1 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
凤年徐1 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
星河耀银海1 小时前
C++ 模板进阶:特化、萃取与可变参数模板
java·开发语言·c++