多繼承與菱形繼承

2021-08-04 10:29:03 字數 1380 閱讀 2558

乙個派生類繼承了兩個或多個基類,這樣的繼承關係叫做多繼承。

#include

using

namespace

std;

class b

;class b1

;class d:public b,public b1

;int main()

如上**,派生類d以public許可權繼承了基類b和基類b1。

構造函式呼叫:首先呼叫派生類d的建構函式,執行順序是按照類派生列表的順序執行的。也就是說首先會執行基類b的建構函式,之後是b1的建構函式,最後時派生類d的建構函式。

析構函式的呼叫:與建構函式的執行順序相反,先析構d,之後是b1,最後是b。

我們去記憶體裡面看看資料是怎麼存放的。

同樣是按照類派生列表的順序從上到下存放。

菱形繼承,就是乙個派生類d多繼承了兩個基類c1,c2。c1,c2又同時繼承了同乙個基類b。這樣的繼承關係就叫做菱形繼承,也叫鑽石繼承。

賦值結束後我們去看看記憶體中資料是怎麼存放的

根據存放順序我們就可以得出菱形繼承的空間模型,由上到下分別是c1,c2,d。

由於c1,c2都繼承了基類b,當我們直接由派生類物件d對基類b中的_b賦值時會出現下面的情況

這就是菱形繼承存在的二義性問題。我們引入虛擬繼承來解決這個問題。虛擬繼承在下篇部落格中詳解。

繼承 多繼承 菱形虛擬繼承

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

單繼承 多繼承 菱形繼承

乙個類繼承另外乙個類,那麼該類就是子類 衍生類 被繼承的這個類叫做父類 基類,超類 繼承 1 單繼承 2 多繼承 python所有的類都預設繼承父類 object 如果子類想呼叫父類私有的,要先在父類裡面定義乙個公有的,然後在公有的裡面先調出私有,最後就可以間接的調出私有,不能在子類中定義公有 cl...

C 多繼承 菱形繼承 虛繼承

b和c都單繼承了a d繼承了b和c 是多繼承 有兩個或兩個以上的基類就是多繼承 class a public int ma class b public a public int mb class c public a public int mc class d public b,public c ...