委託建構函式
在c + + 03,有經常的情況下將乙個建構函式在同乙個類中呼叫另乙個建構函式是有用的。不幸的是,這是用c + + 03不允許。通常這最終導致無論是重複的**:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class
foo
foo(
int
nvalue)
};
在使用()方法被認為是重複的**更好的做法,它有幾個缺點。首先,它是不可讀的,因為它增加了乙個新的功能和一些新的函式呼叫。第二,因為inita()不是乙個建構函式,它可以正常程式流的過程中,稱為成員變數,可能已經被設定和動態分配的記憶體可能已被分配。這意味著inita()需要以被另外的複雜要正確處理好新的初始化和重新初始化的情況下。
幸運的是,c + + 11新增到鏈建設者在一起的能力(稱為委託建構函式)
1
2
3
4
5
6
7
8
9
10
11
12
13
class
foo
foo(
int
nvalue): foo()
// use foo() default constructor to do a
};
正如你所看到的,這是非常乾淨。
有一點要注意:你應該總是使用初始化列表語法時委託建構函式,編譯器不支援委託建構函式一般將標誌這乙個編譯錯誤。如果你試圖從另乙個建構函式體呼叫乙個建構函式,編譯器不會抱怨你的程式也可能不會像預期的那樣
委託建構函式 轉換建構函式
c 11新標準,使我們可以定義所謂的委託建構函式 delegating constructor 乙個委託建構函式使用它所屬的其他建構函式執行它自己的初始化過程。class sales data sales data sales data 0,0.0 sales data string s sales...
C 建構函式之委託建構函式
委託建構函式 c 11新標準擴充套件了建構函式初始值的功能,使得我們可以定義所謂的委託建構函式。乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程,或者說它把它自己的一些 或者全部 職責委託給了其他建構函式。和其他建構函式一樣,乙個委託建構函式也有乙個成員初始值的列表和乙個函式體。在委...
委託建構函式 析構函式
回顧clock類的兩個建構函式 建構函式的實現 clock int newh,int newm,int news hour newh minute newm second news 預設建構函式實現 clock clock hour 0 minute 0 second 0 這兩個建構函式 類似 做同...