【定義】當乙個派生類具有兩個或多個基類時,這種派生方法成為多重繼承或多基類派生。
【語法形式】
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實際上就是乙個虛函式列...