菱形继承和菱形虚拟继承

c++具有多继承的特性,那么菱形继承就是多继承的一种特殊情况,但是菱形继承会出现一些问题,比如数据冗余和二义性;

那么怎么解决这个问题呢?

菱形虚拟继承

菱形虚拟继承的原理

class A
{
public:int _a;
};class B: virtual public A
{
public:int _b;};
class C :virtual public A
{
public:int _c;
};
class D :public B, public C
{
public:int _d;
};int main()
{D d;d.B::_a = 1;d.C::_a = 2;d._b = 3;d._c = 4;d._d = 5;return 0;
}

 我们分析下这段代码,由于菱形虚拟继承,所以只有一个A对象被继承了,放在存放在最下面,方便查找,这样设计就解决了数据冗余和二义性的问题,但是比较复杂,

 当我们用派生类赋值给B或者C时,会发生切片,也是这样设计的;

 进行切片赋值的时候,他会自动偏移到自己对应的那个位置;

 

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

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

相关文章

【Linux】探索网络编程:TCP/UDP协议解析与Socket应用实例

文章目录 前言:1. 预备知识1.1 理解源IP地址和目的IP地址1.2 认识端口号1.3 理解"端口号"和"进程ID"1.4 理解源端口号和目的端口号1.5 认识TCP协议1.6 认识UDP协议1.6 TCP vs UDP 可靠性1.7 网络字节序 2. socket 编程接口2.1 socket 常见API2.…

Pandas数据清洗实战:精准捕捉并优雅过滤异常值,让数据分析更可靠!

1.describe():查看每一列的描述性统计量 # 导包 import numpy as np import pandas as pddf pd.DataFrame(datanp.random.randint(0,10,size(5,3)),indexlist("ABCDE"),columns["Python","NumPy","Pandas"]) dfdf.descri…

2024年7月5日 十二生肖 今日运势

小运播报:2024年7月5日,星期五,农历五月三十 (甲辰年庚午月庚午日),法定工作日。 红榜生肖:狗、羊、虎 需要注意:鸡、牛、鼠 喜神方位:西北方 财神方位:正…

联合查询(多表查询)

多表查询是对多张表的数据取笛卡尔积(关联查询可以对关联表使用别名) 数据准备 insert into classes(name, desc) values (计算机系2019级1班, 学习了计算机原理、C和Java语言、数据结构和算法), (中文系2019级3班,学习了中国传统文学), (自动化2019级5…

土地规划与文化遗产保护:在发展浪潮中守护历史的脉络

在这个日新月异的时代,城市化进程如火如荼,土地规划作为引导城市发展方向的关键,承载着平衡发展与保护的重任。在追求现代化的同时,保护文化遗产不仅是对过去的尊重,更是对未来负责。本文旨在深入探讨如何在土地规划实…

uniapp----- 判断小程序版本有没有更新

const updateManager uni.getUpdateManager();// 当向小程序后台请求完新版本信息,会进行回调updateManager.onCheckForUpdate(function (res) {console.log(是否有新版本, res.hasUpdate);});// 当新版本下载完成,会进行回调updateManager.onUpdateRea…

为了SourceInsight从Linux回到Windows

什么是SourceInsight 现在上网搜索这个软件,大多数说他是一个代码阅读软件;但是在官方的说法里面,这是一款支持多语言的编辑器。大概长这样: 看起来十分老旧是吧,但是他其实他已经是第四代了哈哈哈。其实这个软件是我…

字典树模板+位运算

P3879 [TJOI2010] 阅读理解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) trie树板子题,稍微有一丢丢不一样,套用字典树模板稍加修改就能过 手搓字典树代码: char ch[1010][26], cnt[1010], idx; void insert(string s)//插入 {int p 0…

高校搭建AIGC新媒体实验室,创新新闻教育教学模式

高校作为人才培养的重要阵地,必须紧跟时代步伐,不断创新教育教学模式,提升跨界融合育人水平,通过AIGC新媒体实验室探索创新人才培养模式。AIGC新媒体实验室不仅能够高效赋能高校宣传媒体矩阵,也可以助力教学实践与AIGC…

ISA95-Part3-通讯协议的解析与开发指南

在 MES/MOM 系统中实现 ISA-95 标准的通信协议部分,通常涉及以下几个关键步骤和应用场景: 一、关键步骤和应用场景: 1. ~协议选择~: - MES/MOM 系统需选择符合 ISA-95 标准的通信协议,常用的有 OPC UA(OLE for Process Control Unified Architecture)、XML、以及基于 H…

5分钟读懂GPS-RTK实时动态技术,建议收藏!

由于”智慧工地“理念的兴起和发展,目前越来越多的企业将信息技术手段融合于施工现场安全管理,构建智能化的安全监管模式。基于此,蓝牙LORA融合定位技术、UWB超宽带定位技术、GPS-RTK定位技术等信息技术也越来越频繁出现在大众视野。然而&…

记录通过Cloudflare部署属于自己的docker镜像源

引言 由于最近国内无法正常拉取docker镜像,然而找了几个能用的docker镜像源发现拉取回来的docker镜像不是最新的版本,部署到Cloudflare里Workers 和 Pages,拉取docker 镜像成功,故记录部署过程。 部署服务 登录Cloudflare后&…

Android Gradle开发与应用(一): Gradle基础

Gradle是一种基于Groovy语言的构建工具,用于自动化构建、测试和部署Android应用程序。它提供了一种灵活和可扩展的方式来管理项目的构建过程,并且可以轻松地集成到Android开发工作流程中。 本文将介绍Gradle的基础知识,包括Gradle的安装和配…

软设之面向对象开发流程

面向对象开发流程分为 1.面向对象分析 2.面向对象设计 3.面向对象程序设计 4.面向对象测试 其中 面向对象分析包括 认定对象 组织对象 对象间的互相租用 基于对象的操作 识别类及对象: 识别类及对象 定义属性 定义服务 识别关系 识别包 面向对象程…

C++ 智能指针内存泄漏问题

shared_ptr相互嵌套导致循环引用 代码示例 #include <iostream> #include <memory> using namespace std;class B;class A { public:std::shared_ptr<B> b_ptr;~A() { std::cout << "A destroyed\n"; } };class B { public:std::shared_pt…

数据结构 1.1 数据结构的基本概念

本章总览&#xff1a; 一.什么是数据 1.数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程 序识别和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机只能处理纯数值的问题&#xff0c;如世界第一题计算机ENI…

转让北京文化传媒公司带营业性演出经纪许可证

影视文化传播倡导将健康的影视文化有效传播给观众&#xff0c;从而构建观众与电影制作者的良 性沟通与互动&#xff0c;是沟通电影制作者与电影受众的重要桥梁。影视文化泛指以电影&#xff0c;电视方式所进行的全部文化创造&#xff0c;即体现为电影&#xff0c;电视全部的存在…

Java-List集合堆内存溢出

Java-List集合堆内存溢出 情况一情况二对照分析对照规定堆内存 情况一 往List<Object>的集合中不断插入元素&#xff0c;集合底层的数组会不断扩容&#xff0c;从0 -> 10 -> 10 10>>1…。最终出现堆内存溢出&#xff0c;是在扩容数组大小的时候。这里的过程…

【应届应知应会】SQL常用知识点50道

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;借他一双眼&#xff0c;愿这盛世如先生所愿 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凌七七~❤ 友情提供 目录 数据库的概念 (什么是数据库) RDBMS NOSQL 数据库的分类 …

Qt涂鸦板

Qt版本&#xff1a;Qt6 具体代码&#xff1a; 头文件 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent n…