21 3 菱形繼承 鑽石繼承 引入虛擬繼承

2021-10-01 11:18:19 字數 540 閱讀 5225

//菱形繼承(鑽石繼承) wrong example

class base

;class a : virtual public base

;class b : virtual public base

;class d :public a, public b //多繼承

;void main()

;class a : virtual public base

;class b : virtual public base

;class d :public a, public b //多繼承

;void main()

{ cout資料實際還是兩份的,只不過是,在整個d物件記憶體的後面增加了乙個基類base的資料成員,然後通過虛基表虛擬對映過去的,造成無論通過a還是b去訪問base_data都是乙個值的假象,如下圖:

菱形繼承 菱形虛擬繼承

菱形繼承 鑽石繼承 模型 拿如下 舉例 class person class student public person class teacher public person class graduate public student,public teacher void test 當派生類gr...

繼承 多繼承 菱形虛擬繼承

繼承 繼承是由父類和子類 或稱之為基類與派生類 兩種角色構成,子承父業,就是說派生類會繼承基類的所有的成員,並擁有自己特有的成員。用一段 來解釋說明繼承關係 include using namespace std class base 基類 class derived public base 以共有...

菱形虛擬繼承

菱形繼承在c 繼承中是一種複雜的繼承關係,存在著二義性和資料冗餘的問題,而菱形虛擬繼承則是為了解決菱形繼承所存在的問題。為了 菱形虛擬繼承如何解決該問題,我先建立個乙個較為簡單的菱形繼承模型。下面分別是菱形繼承和菱形虛擬繼承的 實現 菱形繼承 include includeusing namespa...