C++继承-补充

news2024/11/26 4:30:41

本期对继承的知识进行一些补充,还没看过之前对继承讲解的建议先看之前的

C++继承_KLZUQ的博客-CSDN博客

本期补充知识为菱形继承以及菱形虚拟继承相关知识

class A 
{
public:
	virtual void func1()
	{
		cout << "A::func1" << endl;
	}
public:
	int _a; 
};
class B : public A
//class B : virtual public A
{
public:
	int _b;
};
class C : public A
//class C : virtual public A
{
public:
	int _c;
};
class D : public B, public C
{
public:
	int _d;
};

 

我们进入调试,然后看内存窗口,&d,一上来就可以看到两个指针 ,这里就是虚表的指针

当我们走完时,可以看到里面1,2,3,4,5的变化 

也就是说,我们单纯的看菱形继承,其实是和多继承没有区别的

 下面我们再看看菱形虚拟继承

菱形虚拟继承又分为几个问题,首先是只有A里面有虚函数 ,此时是将A单独拿出来了,放在了下面,这里我们说过了

 而它不同的地方在于,我们上面给A写了func1函数,如果我们对他进行重写

我们会发现,首先编译会报错 ,不重写还没事,B和C重写后就有问题了,这是为什么?

原因是,这里A是属于B和C共享的,B去重写,C也去重写,那到底是谁去重写?

我们先把重写的func去掉,然后此时只有A里面有func1, 只有一张虚表,只有A有虚函数,B也要重写,C也要重写,就不行了

解决方案是让D也去重写 ,此时B,C,D都进行了重写

此时就会有人问,那B和C为什么还要去重写?直接让D重写不就好了吗?其实我们在实际中不仅仅会定义D对象,B和C对象也是可能定义的

对于菱形继承,D里面的B和C各自有各自的A,所以重写没有问题,但是菱形虚拟继承,这个A变成公共的了,B也要用,C也要用,那就都别用了,让D用吧

菱形虚拟继承还有更复杂的问题

B和C增加一些新的虚函数,这些虚函数不是重写A的,那该怎么办?

此时B和C就会各自再建一张虚表 

画出来就是这样,如果我们再开几个内存窗口验证的话,比如我们验证B,我们看地址00329d4c和00329d60,就可以发现一个是虚表,存的虚函数地址,另一个是虚机表,存的偏移量

我们再给D单独加一个func3,大家猜一猜会不会再建立一个虚表?

答案是不会,它直接放在A的虚表里了

以上即为本期全部内容,希望大家可以有所收获

如果错误,还请指正 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平板用的触控笔什么牌子好?开学必买电容笔清单

开学季马上就要到来了&#xff0c;自从iPad的Pencil火了之后&#xff0c;国内又陆续推出了一些新的产品&#xff0c;比如平替之类的&#xff0c;有的质量非常好&#xff0c;有的价格非常实惠&#xff0c;还能被大多数人所接受。不过&#xff0c;这里面有不少的产品&#xff0c;…

手把手教你在云环境炼丹:Stable Diffusion LoRA 模型保姆级炼制教程

很多同学都想要自己的专属AI模型&#xff0c;但是大模型的训练比较费时费力&#xff0c;不太适合普通用户玩。AI开发者们也意识到了这个问题&#xff0c;所以就产生了微调模型&#xff0c;LoRA就是其中的一种。在AI绘画领域&#xff0c;只需要少量的一些图片&#xff0c;就可以…

七夕情侣飞行棋游戏限定版本源码/解锁版

七夕情侣飞行棋限定版本源码已经发布&#xff01;这是一款专为情侣打造的桌游&#xff0c;让您与您的另一半一起感受浪漫的体验。 更为重要的是&#xff0c;这个版本已经移除了路由器限制&#xff0c;解锁了全部功能&#xff0c;而且没有任何加密措施&#xff0c;您只需将源码…

将ChatGPT集成整合到业务中时,3个要做和3个不要做的事项

​关于ChatGPT的讨论甚多&#xff0c;毫无疑问的是&#xff0c;几乎每个人都应该使用它&#xff0c;无论用于个人生活问题的解答还是工作中简化日常任务。越来越多的行业也正在探索这项技术的应用场景&#xff0c;从优化客户服务体验、简化旅行计划到便捷的内容创作等&#xff…

day 35 | ● 343. 整数拆分 ● 96.不同的二叉搜索树

343. 整数拆分 他是有三个数进行比较&#xff0c;原来的dp[i]、dp[j] * (i - j)、j*(i - j)。为什么第二个不包含第三个呢&#xff0c;因为我们设定的dp为至少两个数的乘积&#xff0c;所以dp[j]不包含j本身。 func integerBreak(n int) int {dp : make([]int, n 1)dp[1] 0d…

python 画二部图

1. 特色二部图 修改节点与边颜色、大小等 import networkx as nx import matplotlib.pyplot as plt plt.figure(设备-用户关系图, figsize(4, 6)) # 设置画布大小list_fid [1, 2, 3, 4] # 添加设备节点 list_uid ["a", "b", "c"] # 添加用…

【HCIP】14.BGP反射器

反射器规则 非非不反 如果路由反射器从自己的非客户机学习到的一条IBGP路由&#xff0c;则它将该路由反射给所有客户如果RR从自己的客户机学习到一条IBGP路由&#xff0c;则反射给所有非客户&#xff0c;以及除了该客户之外的所有客户如果RR学习到的EBGP路由&#xff0c;则反…

【高级IO】- 多路转接之 poll | epoll

目录 I/O多路转接 - poll poll 函数 poll 服务器 poll 服务器 poll 的优点 poll 的缺点 I/O 多路转接 - epoll epoll 的相关系统调用 epoll_create 函数 epoll_ctl 函数 epoll_wait 函数 epoll 工作原理 epoll 服务器 ​编辑 epoll 的优点&#xff08;与 sele…

vr游乐场项目投资方案VR主题游乐馆互动体验

VR文旅景区沉浸互动体验项目是指利用虚拟现实技术在文旅景区中创建沉浸式的互动体验项目。通过虚拟现实技术&#xff0c;游客可以身临其境地体验景区的风景和文化&#xff0c;与虚拟场景中的元素进行互动。 普乐蛙VR设备 普乐蛙VR设备案例分享 这种项目可以为游客带来全新的旅游…

2023年中秋月饼市场趋势分析(月饼京东销售数据分析)

中秋将至&#xff0c;月饼作为节令食品将再次掀起消费热潮。今年月饼市场的需求如何呢&#xff0c;是更受欢迎还是热度有所降低&#xff0c;结合数据我们一起来看今年月饼市场的销售表现。 在这里&#xff0c;我们分别选取了2022年第31周-32周和2023年第31周-32周&#xff08;…

抖音推出AI机器人,竟被鸡兔同笼难倒

自从Chatgpt横空出世爆火后&#xff0c;咱国内也掀起了一波AI的风潮&#xff0c;前几期有评测过百度的“文心一言”&#xff0c;总的来说体验还不错&#xff0c;但是距离Chatgpt还是有上升的空间&#xff0c;因为它的上下文理解还是不够智能。 百度有文心一言&#xff0c;阿里…

基于CentOS搭建私有仓库harbor

环境&#xff1a; 操作系统&#xff1a;CentOS Linux 7 (Core) 内核&#xff1a; Linux 3.10.0-1160.el7.x86_64 目录 安装搭建harbor &#xff08;1&#xff09;安装docker编排工具docker compose &#xff08;2&#xff09;下载Harbor 安装包 &#xff08;3&…

【操作系统】寄存器

概念 寄存器是CPU内部用来存放数据的一些小型存储区域&#xff0c;用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路&#xff0c;但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的&#xff0c;因为一个锁存器或触发器…

docker与docker-compose搭建redis1主2从3哨兵

docker安装redis docker pull redis:latest创建目录结构 用于挂载数据卷配置文件等 运行redis容器 主redis配置 下面这种方式挂载的配置文件不生效。 docker run -d \--name master_redis_6379 \-p 6379:6379 \--restart unless-stopped \-v /mydata/master_redis/data:/da…

IDEA中导入多module的Maven项目无法识别module的解决办法

首先举个栗子 这是正常的多module工程&#xff08;spring cloud项目&#xff09; 正常工程.png 这是导入出现问题的多module工程 导入出现问题的工程.png 原因&#xff1a; 出现该问题&#xff0c;是由于打开工程的时候IDEA只编译了最外层的pom.xml文件&#xff0c;而内部的…

在线成绩查询

在如今快节奏的社会中&#xff0c;家长们越来越重视孩子的学习情况。为了满足家长们对孩子学习情况的关注&#xff0c;老师们需要一个方便、快速、及时的学生成绩在线查询系统。 今天&#xff0c;我将向大家推荐一个教师必备的工具——易查分&#xff01;相比传统的自行开发的成…

前端下载文件方式(Blob)

以下以下载图标svg文件为例&#xff0c;实现点击按钮下载文件&#xff0c;其中icon结构如下&#xff1a; const DownloadSvg (props) > {function download(downfile) {const tmpLink document.createElement("a");const objectUrl URL.createObjectURL(downfi…

恒驰喜讯 | 荣获2023超聚变合作伙伴大会“聚心同力销售支撑奖”

“创价值、同信念、共成长”&#xff0c;8月18日&#xff0c;2023超聚变合作伙伴大会在北京举行。来自全国各地超过1500家行业、商业、服务生态伙伴&#xff0c;共同探讨算力产业发展。聚菁英&#xff0c;共赢算力未来。作为超聚变的核心合作伙伴&#xff0c;上海恒驰信息系统有…

《Go 语言第一课》课程学习笔记(十)

复合数据类型 同构复合类型&#xff1a;从定长数组到变长切片 由多个同构类型&#xff08;相同类型&#xff09;或异构类型&#xff08;不同类型&#xff09;的元素的值组合而成&#xff0c;这类数据类型在 Go 语言中被称为复合类型。 数组有哪些基本特性&#xff1f; Go 语…