C 4 4 多重繼承

2021-09-27 06:10:19 字數 1453 閱讀 1440

【定義】當乙個派生類具有兩個或多個基類時,這種派生方法成為多重繼承或多基類派生。

【語法形式】   

class 派生類名:繼承方式1 基類名1,.....,繼承方式n 基類名n;
【示例】

#includeusing namespace std;

class x

void visit()

(2)引數總表中包含完成所有基類初始化所需的引數個數

(3)建構函式執行順序

基類建構函式 ===>物件成員的建構函式 ===>派生類建構函式

若存在多個基類,則按照派生類宣告時從左到右的順序呼叫建構函式

【示例】

#includeusing namespace std;

class x

【示例】

由運算結果可知,當基類通過多條派生路徑被乙個派生類繼承時,該派生類只繼承該基類一次,可知base中的a只保留一次。

【類層次圖】

(3)虛基類與建構函式

【示例】

【注意】

示例中:

base是乙個虛基類,它只有乙個帶引數的建構函式,因此要求在派生類base1、base2和derived的建構函式的初始化列表中,都必須帶有對類base的建構函式的呼叫。

如果base不是乙個虛基類,在派生類derived中的建構函式的初始化列表中呼叫base的建構函式是錯誤的

【原因】:派生類只負責直接基類的建構函式的呼叫,即對直接基類中的成員變數賦值

虛基類base的建構函式只被derived的構造函式呼叫一次,而base1和base2的呼叫被忽略。

(4)虛基類使用說明

乙個基類可作為派生類的虛基類同時,也可以作為派生類的非虛基類

virtual與繼承方式關鍵字的先後順序無關緊要

virtual public或public virtual都是合法的

C 44 函式引數的秘密 (上)

下面的程式輸出什麼?為什麼呢?int k 1 printf d,d n k k include int func int i,int j int main 輸出 gcc i 2,j 1 3特別說明 此處暫時沒有找到有其它求值順序的編譯器來輸出說明。由於c語言未明確規定函式引數的求值順序,其交由具體的...

多重繼承 C 中的多重繼承

多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...

c 多重繼承

其實想寫這篇文章,是因為突然在整理論壇上的帖子的時候,突然發現乙個人問我如何才能在c 中實現多重繼承,當時我答的很隱晦,因此這裡我想補充說明一下.首先,我要說明一下,c 中是沒有類的多重繼承這個概念.要使用多重繼承必須要通過介面inte ce來完成.可是大家都知道inte ce實際上就是乙個虛函式列...