C 11 特性之繼承建構函式

2021-09-18 04:22:36 字數 919 閱讀 8313

c++ 中子類無法直接繼承父類的建構函式,如果要使用父類的建構函式,必須通過顯式的呼叫。如**清單3-2所示, 派生類 a 定義了多個建構函式,派生類 b 只新增了乙個介面函式,這時派生類為了構造繼承自父類的成員變數,多次顯式的呼叫 a 的建構函式,造成了**的冗餘。

c++11 中, 派生類可以使用 using 關鍵字來繼承基類的建構函式。

在**清單 3-4 中, 通過使用 using a::a 派生類 b 就繼承了 a 中的所有建構函式。 同時繼承建構函式與預設函式(預設構造,析構,拷貝等)一樣時隱式的,也就是說某個繼承的建構函式如果不被呼叫,就不會生成相關的**。因此,與**清單 3-2 相比明顯節省了**空間。

(1) 繼承建構函式只能用於初始化基類的成員變數,對於派生類新增成員變數無法進行初始化。這也意味著繼承建構函式適用於基類有多個建構函式,而派生類沒有新增新的成員變數的場景。

(2)繼承建構函式不能繼承建構函式的預設引數。

繼承衝突一般發生在多繼承的情況下。如清單 3-7 所示,c 類同時繼承了 a 和 b,並且 a 和 b 有相同的引數列表,這就在 c 類繼承的建構函式中產生了相同的建構函式。此時可以通過顯式的定義繼承類中衝突函式解決。

wong m , ibm xl編譯器中國開發團隊. 深入理解c++11[m]. 機械工業出版社, 2013.

C 11之繼承建構函式

1.1.3 using 宣告使用範圍 2.c 11使用using來繼承基類建構函式 3.繼承建構函式可能遇到的問題 當類b繼承於類a的時候,它會繼承類a中的資料成員與普通成員函式。但是某些成員函式是無法被繼承下來的,比如類a 基類 中的合成建構函式 包括構造 析構 拷貝等等 因此,類b在初始化類a的...

C 11 繼承建構函式

繼承建構函式 基類有多個不同版本的建構函式,子類必須對應建構函式來進行 透傳 如 class base base double d,int i void fun float d class derived public base derived double d,int i base d,i voi...

C 11的繼承建構函式

c 是物件導向的基石,類具有可派生性。派生類可以自動獲得基類的成員變數和介面,不過基類的非虛函式則無法再被派生類使用了。如果派生類要使用基類的建構函式,通常需要在建構函式中顯示宣告。例如 struct a struct b a b派生於a,b又在建構函式中呼叫a的建構函式,從而完成了建構函式的 傳遞...