C 11 繼承建構函式

2021-10-05 23:41:43 字數 1036 閱讀 7187

繼承建構函式

基類有多個不同版本的建構函式,子類必須對應建構函式來進行「透傳」,如:

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)

// ......

};

derived類繼承base類,建構函式必須一一「透傳」base類的構造函式引數,很繁瑣。

派生類使用基類的函式可以用using 宣告,如新增using base::fun;

class derived : public base 

derived(double d, int i) : base(d, i) {}

void fun(int i)

// ......

};

當時用語句

derived d(2);

d.fun(2.3f);

fun呼叫的函式為父類函式。列印:

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允許派生類繼承基類的建構函式 預設建構函式 複製建構函式 移動建構函式除外 注意 繼承的建構函式只能初始化基類中的成員變數,不能初始化派生類的成員變數 如果基類的建構函...