c++11之前的狀況
建構函式多了以後,幾乎必然地會出現**重複的情況,為了避免這種情況,往往需要另外編寫乙個初始化函式。
資料成員初始化之後要進行某些其他的工作,而這些工作又是每種構造方式都必須的,所以另外準備了乙個init函式供各個構造函式呼叫。class cty
cty(
int x,
int y)
;cty
(int x,
int y,
int z)
cty(
int x,
int y,
int z,
int h)
void
initdata
(int i=0,
int j=0,
int k=0,
int l=0,
int m=0,
int n=0)
};
這種方式確實避免了**重複,但是有兩個問題:
1.沒有辦法不重複地使用成員初始化列表
2.必須另外編寫乙個初始化函式。
c++11的解決方案
c++11擴充套件了建構函式的功能,增加了委託建構函式的概念,使得乙個建構函式可以委託其他建構函式完成工作。使用委託建構函式以後,前面的**變成下面這樣:
真正的構造工作由最後乙個建構函式完成,而其他的建構函式都是委託第乙個建構函式完成各自的構造工作。這樣即去掉了重複**又避免了前一種方法帶來的問題。class cty
cty(
int x,
int y)
:cty
(x, y,0,
0,0,
0);cty
(int x,
int y,
int z)
:cty
(x, y, z,0,
0,0)
;cty
(int x,
int y,
int z,
int h)
:cty
(x, y, z, h,0,
0);}
;
通過**可以看出:委託建構函式的語法和建構函式中呼叫基類建構函式一樣。呼叫順序,效果什麼也差不多。
C 建構函式之委託建構函式
委託建構函式 c 11新標準擴充套件了建構函式初始值的功能,使得我們可以定義所謂的委託建構函式。乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程,或者說它把它自己的一些 或者全部 職責委託給了其他建構函式。和其他建構函式一樣,乙個委託建構函式也有乙個成員初始值的列表和乙個函式體。在委...
委託建構函式
委託建構函式 在c 03,有經常的情況下將乙個建構函式在同乙個類中呼叫另乙個建構函式是有用的。不幸的是,這是用c 03不允許。通常這最終導致無論是重複的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 classfoo foo intnvalue 在使用 方法被認為是重複的 更好的...
C 基礎之委託
委託常常和事件在一起使用,可以理解委託是方法的容器,事件則是委託的另一種表現形式。委託和事件雖然寫得還比較多,不過也只是用的熟練而已,趁週末沒課好好鞏固下基礎,一點一點積累吧。1.乙個簡單的小例子 class program class people public void eatpear stri...