C 繼承建構函式和委派建構函式

2021-09-10 09:18:16 字數 836 閱讀 3027

如果我們在構造b的時候想要擁有a這樣的構造方法的話,就必須乙個乙個的透傳各個介面,那麼這是很麻煩的
derived(int va)

:base(va)

derived(char c)

:base(c)

改寫成這樣://使用繼承建構函式 using base1::base1;

而且,更神奇的是,c++11標準繼承建構函式被設計為跟派生類中的各個類預設函式(預設構造,析構,拷貝構造等)一樣是隱式宣告的。那麼這就意味著如果乙個繼承建構函式不被相關**使用,編譯器就不會產生真正的函式**,這樣比透傳更加節省了空間。

基類的建構函式可能會有預設值,但是對於繼承建構函式來講,引數的預設值是不會被繼承的。

c++11的委派建構函式是在建構函式的初始化列表位置進行構造

class info

int type = 3;

char c = 'd';

public:

info()

info(int i)

:type(i)

info(char cc)

:c(cc)

};

引入委派建構函式:

class info2

public:

info2()

:info2(1, 'a')

info2(int i)

:info2(i, 'a')

info2(char e)

:info2(1, e)

};

C 11中繼承建構函式和委派建構函式

1 繼承建構函式 在c 繼承中,我們可能會遇到下面這個例子 class base base char c m c c private int m value char m c class derived public base 那麼如果我們在構造b的時候想要擁有a這樣的構造方法的話,就必須乙個乙個的...

委派建構函式

1,可以形成鏈狀的委託建構函式,但是不可以形成委託環 class weipai2 public weipai2 string name weipai2 name,1 weipai2 int weipai2 ch weipai2 weipai2 1 以下是我的測試 include using name...

C 11初窺二 繼承建構函式和委派建構函式

分析了這兩種用法,真想吐槽兩句,這兩個特性確實有實際需要,但客觀來說,現有標準足夠用,而且帶來的代價也非常大,又給c 複雜的語法糖重重的抹了一筆!一 繼承建構函式 繼承建構函式的引入原因 如果基類的建構函式很多,那麼子類的建構函式想要實現同樣多的構造介面,必須一一呼叫基類的建構函式,有點麻煩 於是乎...