繼承建構函式
基類有多個不同版本的建構函式,子類必須對應建構函式來進行「透傳」,如:
derived類繼承base類,建構函式必須一一「透傳」base類的構造函式引數,很繁瑣。class base
base(double d, int i)
void fun(float d)
// ......
};class derived : public base
derived(double d, int i) : base(d, i) {}
void fun(int i)
// ......
};
派生類使用基類的函式可以用using 宣告,如新增using base::fun;
:
當時用語句class derived : public base
derived(double d, int i) : base(d, i) {}
void fun(int i)
// ......
};
fun呼叫的函式為父類函式。列印:derived d(2);
d.fun(2.3f);
base fun
否則會列印:
derived fun
同派生類使用基類函式的方法,可以使用using宣告父類的建構函式using base::base
,這樣可以省略子類建構函式的宣告:
則輸出:class base
base(double d, int i)
// ......
};class derived : public base ;
int main()
base: base(int)
C 11的繼承建構函式
c 是物件導向的基石,類具有可派生性。派生類可以自動獲得基類的成員變數和介面,不過基類的非虛函式則無法再被派生類使用了。如果派生類要使用基類的建構函式,通常需要在建構函式中顯示宣告。例如 struct a struct b a b派生於a,b又在建構函式中呼叫a的建構函式,從而完成了建構函式的 傳遞...
C 11之繼承建構函式
1.1.3 using 宣告使用範圍 2.c 11使用using來繼承基類建構函式 3.繼承建構函式可能遇到的問題 當類b繼承於類a的時候,它會繼承類a中的資料成員與普通成員函式。但是某些成員函式是無法被繼承下來的,比如類a 基類 中的合成建構函式 包括構造 析構 拷貝等等 因此,類b在初始化類a的...
c 11 繼承構造
define crt secure no warnings include include include include c 11允許派生類繼承基類的建構函式 預設建構函式 複製建構函式 移動建構函式除外 注意 繼承的建構函式只能初始化基類中的成員變數,不能初始化派生類的成員變數 如果基類的建構函...