菱形繼承和菱形虛擬繼承

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.pswp.cn/web/39816.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39816.shtml
英文地址,請注明出處:http://en.pswp.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…