C 學習之繼承篇(多繼承與多重繼承)

2021-08-18 04:06:53 字數 1816 閱讀 4982

1.多繼承

多繼承是指乙個子類繼承多個父類。多繼承對父類的個數沒有限制,繼承方式可以是公共繼承、保護繼承和私有繼承,

不寫繼承方式,預設是private繼承

多繼承舉例:

#include

#include

#include

using namespace std;

/*** 定義工人類: worker

* 資料成員: m_strname

* 成員函式: work()

*/class worker

virtual ~worker()

void work()

protected:

string m_strname;

};/**

* 定義兒童類: children

* 資料成員: m_iage

* 成員函式: play()

*/class children

~children()

void play()

protected:

int m_iage;

};/**

* 定義童工類: childlabourer

* 公有繼承工人類和兒童類

*/class childlabourer :public worker,public children

~childlabourer()

};int main(void)

輸出結果:

worker

children

childlabourer

jack

work

~childlabourer

~children

~worker

由輸出結果可以看出,在多繼承中,任何父類的指標都可以指向子類的物件,在例項化子類時,先根據繼承的順序依次呼叫父類的建構函式,然後再呼叫該子類自己的建構函式;

用delete銷毀該基類物件時,如果該基類的析構函式不是虛析構函式,且該基類的繼承順序在第乙個,如上面的worker類,(class childlabourer :public worker,public children)那麼delete 父類的時候只會呼叫父類worker的析構函式,系統不會出錯,但是如果繼承的時候順序不是在第一位(class childlabourer :public children,public worker),就會報記憶體洩露的錯誤,如下圖所示,如果父類的析構函式是虛析構函式,那麼銷毀的時候會先呼叫子類的析構函式再呼叫所有父類的析構函式,注意,此時,子類的父類的析構函式都會被呼叫!!!

2.多重繼承

多重繼承特點總結如下:

(1)多重繼承與多繼承不同,當b類從a類派生,c類從b類派生,此時稱為多重繼承

(1)當例項化子類時,會首先依次呼叫所有基類的建構函式,最後呼叫該子類的建構函式;銷毀該子類時,則相反,先呼叫該子類的析構函式,再依次呼叫所有基類的析構函式。

(2)無論繼承的層級有多少層,只要它們保持著直接或間接的繼承關係,那麼子類都可以與其直接父類或間接父類構成 is a的關係,並且能夠通過父類的指針對直接子類或間接子類進行相應的操作,子類物件可以給直接父類或間接父類的物件或引用賦值或初始化。

C 學習之繼承篇(多繼承與多重繼承)

1.多繼承 多繼承是指乙個子類繼承多個父類。多繼承對父類的個數沒有限制,繼承方式可以是公共繼承 保護繼承和私有繼承,不寫繼承方式,預設是private繼承 多繼承舉例 include include include using namespace std 定義工人類 worker 資料成員 m st...

c 學習之繼承篇(多重繼承之虛繼承)

虛繼承 是物件導向程式設計中的一種技術,是指乙個指定的基類,在繼承體系結構中,將其成員資料例項共享給也從這個基型別直接或間接派生的其它類。形式 在繼承定義中包含了virtual關鍵字的繼承關係,如下圖中,類a就叫做虛基類。虛擬繼承是多重繼承中的菱形繼承所特有的概念。虛擬基類是為解決多重繼承而出現的。...

多繼承與多重繼承

什莫是多繼承?乙個類擁有兩個或者兩個以上的父類 什莫是多重繼承?乙個類不僅僅有父類還有祖父類 什莫是虛繼承?虛繼承是為了解決多繼承的問題 經過這樣的宣告後,當基類通過多條派生路徑被乙個派生類繼承時,該派生類只繼承該基類一次,也就是說,基類成員只保留一次。菱形繼承 以往,在派生類的建構函式中只需負責對...