如果我們在構造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 複雜的語法糖重重的抹了一筆!一 繼承建構函式 繼承建構函式的引入原因 如果基類的建構函式很多,那麼子類的建構函式想要實現同樣多的構造介面,必須一一呼叫基類的建構函式,有點麻煩 於是乎...