当前位置: 首页 > news >正文

带虚继承的类对象模型

文章目录

    • 1、代码
    • 2、 单个虚继承
    • 3、vbptr是什么
    • 4、虚继承的多继承

1、代码

#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

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      | 01      | 8 (Derive1d(Derive1+0)Base)
vbi:       class  offset o.vbptr  o.vbte fVtorDispBase       8       0       4 0

在这里插入图片描述

3、vbptr是什么

vbptr是虚基类表,里面存放的是vbptr指针和虚基类的成员变量相对于类对象的偏移量

4、虚继承的多继承

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


http://www.mrgr.cn/news/82456.html

相关文章:

  • 本地调试自定义Maven Plugin步骤
  • redis7基础篇2 redis的哨兵模式2
  • Vue2中使用Echarts
  • @MapperScan
  • 靶场搭建问题(技巧)总结
  • 51单片机——LED模块
  • Linux环境(CentOs7) 安装 Node环境
  • 深入浅出梯度下降算法:快速抵达函数最小值的方法
  • Java Web开发基础——Java Web项目的结构与组织
  • 【网络】ARP表、MAC表、路由表
  • 【Rust自学】10.2. 泛型
  • 【人工智能】人工智能与大模型
  • ctfshow 每日练习 web 区 php特性 1-10
  • kubernetes学习-kubectl命令、探针(二)
  • 关于linux的ld.so.conf.d
  • 阿里云服务器上安装配置Logtail日志收集客户端
  • Node 如何生成 RSA 公钥私钥对
  • Formality:官方Tutorial(一)
  • 『 Linux 』高级IO (二) - 多路转接
  • SQL字符串截取函数——Left()、Right()、Substring()用法详解
  • 计算机网络 (21)网络层的几个重要概念
  • AI数据标注师理论部分考试题库 - 500题
  • Spring AOP 扫盲
  • React Router 用法概览
  • C# 附加到进程中,发现断点不是实的断点
  • 中国联通首次推出一套量化大模型的新标准