C++之多繼承與虛繼承
1. 多繼承
1.1 多繼承概念
- 一個類有多個直接基類的繼承關系稱為多繼承
- 多繼承聲明語法
class 派生類名 : 訪問控制 基類名1, 訪問控制 基類名2, ... { 數據成員和成員函數聲明 };
- 類 C 可以根據訪問控制同時繼承類 A 和類 B 的成員,並添加自己的成員:
1.2 多繼承的派生類構造和訪問
- 多個基類的派生類構造函數可以用初始化列表調用基類構造函數來初始化數據成員
- 執行順序與單繼承構造函數情況類似。多個直接基類構造函數執行順序取決於定義派生類時指定的各個繼承基類的順序。
- 一個派生類對象擁有多個直接或間接基類的成員。不同名成員訪問不會出現二義性。如果不同的基類有同名成員,派生類對象訪問時應加以識別。
1.3 多繼承的簡單應用
1.3.1 示例 1
1.3.2 示例 2
2. 虛繼承 virtual
如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明的名字進行訪問時,可能產生二義性。 如下圖:
如下圖的分析:
總結:
- 如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明的名字進行訪問時,可能產生二義性。
- 如果在多條繼承路徑上有一個公共的基類,那么在繼承路徑的某處匯合點,這個公共基類就會在派生類的對象中產生多個基類子對象。
- 要使這個公共基類在派生類中只產生一個子對象,必須對這個基類聲明為虛繼承,使這個基類成為虛基類。
- 虛繼承聲明使用關鍵字 virtual
如下虛繼承示例: