C 中多重繼承構造函式呼叫的先後順序

2021-06-21 11:06:58 字數 786 閱讀 9763

//先看一段簡單的**,其中e、d是祖先類
#includeusing namespace std;

(由dev-c++通過)

這裡面的e、c是最終的祖先類,d繼承了e和c,a繼承了c,最後b繼承了d和a。

當在main函式中例項化類b之後,由執行結果及 繼承順序 class b : public d, public a 可知:編譯器會從左向右掃瞄該語句,先構造類d(構造類d之前又需要根據類d的繼承順序先構造類e和類c),之後再構造類a(構造類a之前又需要構造類c),所以最終的構造順序會是:e、c、d、c、a、b。 析構函式的呼叫順序與建構函式恰好相反。

要注意的一點是:在該例中,類b通過類d和類a間接繼承了兩次類c,此時的類b中含有兩份類c的拷貝,若c中含有資料成員,則可能會導致二義性(ambiguous),這樣的多重繼承方式稱為:複製繼承。 更好的多重繼承方式為:共享繼承,之後再加上例子研究。

C 中多重繼承建構函式執行順序

1 1 include 2 include 3 4using namespace std 56 classa11 12 classb17 18 class c public b,publica24 25 intmain 輸出 b ac 分析 多重繼承與單繼承類似,也是先執行基類建構函式。多個基類之間...

多重繼承 C 中的多重繼承

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

多重繼承同名函式呼叫

在主程式中派生類物件child可呼叫派生類中的成員函式display,若要呼叫基類的成員函式display,可在派生類的成員函式display中呼叫基類的成員函式display,但必須在該成員名之前加上基類名和作用域識別符號 示例如下 include includeusing namespace s...