C++ 菱形继承 +虚继承

菱形继承

两个派生类继承同一个基类而又有某个类同时继承者两个派生类,这种继承被称为菱形继承,或者钻石型继承。
在这里插入图片描述

菱形继承存在的问题

1)羊继承了动物的数据和函数,鸵同样继承了动物的数据和函数,当草泥马调用函数或者数据时,就会产生二义性

2)草泥马继承自动物的函数和数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。

通过虚继承解决菱形继承所带来的二义性问题

//虚继承
class Base1 : virtual public BigBase{};
class Base2 : virtual public BigBase{};
//普通继承
class Base1 :  public BigBase{};
class Base2 :  public BigBase{};

在这里插入图片描述

此时,两个子类继承的就是虚基类指针,通过指针+偏移量找到同一个变量。两个子类的共同子类继承的也是虚基类指针。解决了菱形继承二义性的问题。

其他

菱形继承结构图

在这里插入图片描述

虚继承工作原理

通过偏移量访问虚基类变量

在这里插入图片描述
在这里插入图片描述

得到偏移量后 可通过偏移量访问变量

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCR 103. 零钱兑换 (从dfs->记忆化搜索->动态规划)

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例 1: 输入:coins [1, 2, 5], amount …

密码学——密码学基础、散列函数与数字签名

1.密码学概述 是信息安全的基础和核心,是防范各种安全威胁的重要手段,信息安全的许多相关知识都与密码学相关。 密码学发展 密码学是一门古老而又年轻的学科 ,几千年以前就存在,至今仍在发展演进。地位非常重要甚至起决定性作用…

JS API日期对象

目标:掌握日期对象,可以让网页显示日期 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 实例化 目标:能够实现实例化日期对象 在代码中发现了new关键字时,一般将这个操作称为实例化 创建一个时…

CTFshow-命令执行(Web29-40)

CTFshow-命令执行(Web29-40) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依…

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多,需要不断的去学习和使用,现系统性的整理一下。以备录; 1.创建pro文件 1.1 步骤: Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

移动端自动化Auto.js入门及案例实操

前提: Appium 和 Airtest 编写的自动化脚本都依赖于 PC 端运行,没有办法直接运行在移动端 Auto.js是什么? 1.是 Android 平台上的一款自动化工具,它通过编写 JavaScript 脚本,对 App 进行自动化操作 2.只支持安卓&a…

【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录 微信小程序字符串字符串模板字符串拼接 上传图片编写JS代码编写wxml代码编写wxss代码 GET请求测试编写测试代码域名不合法问题 GET和POST请求测试编写JS代码编写wxml代码编写wxss代码 效果展示 微信小程序字符串 字符串模板 这是ES6引入的特性,允许你通过…

【深度学习入门】深度学习介绍

1.1 深度学习介绍 学习目标 目标 知道深度学习与机器学习的区别了解神经网络的结构组成知道深度学习效果特点 应用 无 1.1.1 区别 1.1.1.1 特征提取方面 机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识深度学习通常由多个层组成&#xff0c…

SparkSQL与Hive的整合

文章目录 SparkSQL与Hive的整合1.1. Spark On Hive1.1.1. Hive的准备工作1.1.2. Spark的准备工作1.1.3. Spark代码开发1.1.4. Spark On Hive案例 1.2. Hive On Spark1.3. SparkSQL命令行1.4. SparkSQL分布式查询引擎1.4.1. 开启ThriftServer服务1.4.2. beeline连接ThriftServer…

梳理你的思路(从OOP到架构设计)_基本OOP知识03

目录 1、<基类/子类 >结构的接口(卡榫函数) 1&#xff09;卡榫(Hook) 2&#xff09;卡榫函数的Java实现 2、IoC机制与基於 Default 軟硬整合觀點 函数 1&#xff09;卡榫函数实现IoC机制 2&#xff09;默认(Default)行为 1、<基类/子类 >结构的接口(卡榫函数…

软件测试--录制与回放脚本

准备工作 安装phpstudy 配置两个内容 放demo44文件夹 在浏览器输入http://localhost/demo44/index.html&#xff0c;出现如图所示的网站 输入用户名和密码 步骤一&#xff1a;打开Virtual User Generator&#xff0c;点击新建&#xff0c;点击new 步骤二&#xff1a;点击如下…

1.2.3计算机软件

一个完整的计算机系统由硬件和软件组成&#xff0c;用户使用软件&#xff0c;而软件运行在硬件之上&#xff0c;软件进一步的划分为两类&#xff1a;应用软件和系统软件。普通用户通常只会跟应用软件打交道。应用软件是为了解决用户的某种特定的需求而研发出来的。除了每个人都…

前端传入Grule,后端保存到 .grl 文件中

前端传入Grule&#xff0c;后端保存到 .grl 文件中 通过简单的输入框&#xff0c;将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言&#xff0c;有 then 关键字…

公众号看到一个小知识(遥感影像标签的数值问题)

遥感影像标签的数值问题。 拿到手的标签图像&#xff0c;是二分类形式&#xff0c;分为0和1。 这样的形式&#xff0c;不能直接在win10打开。双击图像文件后&#xff0c;如下&#xff1a; 但是可以在QGIS可视化。在QGIS可视化如下&#xff1a; 为什么会这样&#xff1f;大概是因…

【干旱指数】非一致性干旱指数:SnsPI

非一致性干旱指数:SnsPI 非一致性SPI 干旱指数(SnsPI)指数简介MATLAB代码实现Python代码实现参考近年来受气候和人类活动的显著影响,水文序列形成的物理基础条件发生变化,导致水文序列不满足一致性假定即呈非一致性特征。 已有研究主要通过以下两类方法解决非一致性干旱问…

《九重紫》逐集分析鉴赏—序言、概览、框架分析

主标题:《九重紫》一起追剧吧副标题:《九重紫》逐集分析鉴赏—序言、概览、框架分析《永夜星河》后,以为要浅尝剧荒,一部《九重紫》突出重围。看了宣传片感觉不是很差,看了部分剪辑感觉还可以,看了一两集感觉可以追吧,又看了几集——有新欢了,永夜我终于可以放下了,终…

Python Bokeh库:实现实时数据可视化的实战指南

目录一、Bokeh简介二、安装Bokeh三、创建简单的Bokeh图表四、实时更新图表五、集成到Flask应用中六、注意事项七、总结在数据分析和科学计算中,数据可视化是不可或缺的一部分。它能够直观地展示数据,帮助我们快速发现规律和趋势。Bokeh是Python中一个强大的数据可视化库,尤其…

月底课程关闭 | 中国大学MOOC公开课《人工智能与交通大数据实战》首次开课,欢迎选修!...

各位小伙伴们,今年我在中国大学MOOC开设面向全国高校师生的《人工智能与交通大数据实战》课程,编号:0818BJTU217,交通、土木、规划、计算机等领域的本科生和研究生都可以选,欢迎大家选课交流!也欢迎大家推荐给身边的同学和学弟学妹们选课!今年首次开课,课程内容与我在北…

Node.js(v16.13.2版本)安装及环境配置教程

一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位&#xff08;v16.13.2版本&#xff09; 下载后的zip文件 二、解压文件到nodejs&#xff0c;并打开文件夹nodejs&#xff0c;复制解压…

UE5 C++ Subsystem 和 多线程

一.Subsystem先做一个简单的介绍&#xff0c;其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能&#xff0c;属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…