構(gòu)造函數(shù)之二:構(gòu)造函數(shù)常見的使用方式
?1、拷貝構(gòu)造函數(shù):
? 模型: ?
[cpp]?view plain?copy class?A??? ??{?? ?????public?:?? ????A(A&?a){?? ??????//函數(shù)體?? ????}?? ??};??
什么時候調(diào)用拷貝構(gòu)造函數(shù):
(1) 當(dāng)用類的一個對象去初始化該類的另一個對象時候。系統(tǒng)
自動調(diào)用它實現(xiàn)拷貝賦值
? 形如: A a(1,1); A b(a);
(2) 若函數(shù)的形參為類的對象,調(diào)用函數(shù)時,實參賦值形參,系統(tǒng)自動
調(diào)用拷貝函數(shù).
? ? ? ? test(A a); ? ? ? A aa; test(aa);
2、組合類構(gòu)造函數(shù)
?模型:
? 類::類(對象成員所需的形參,本類成員形參):對象1(參數(shù)),對象2(參數(shù)),……{
? 本類初始化
?}
?調(diào)用順序:
? ? ?先調(diào)用內(nèi)嵌對象的的構(gòu)造函數(shù),先聲明的先調(diào)用。如果是缺省構(gòu)造函數(shù),則內(nèi)嵌對象的初始化也將調(diào)用相應(yīng)的缺省構(gòu)造函數(shù),析構(gòu)相反。
?舉例:
[cpp]?view
plain?copy
class?Base???
{??
private:??
????int?b1;??
????int?b2;??
public:??
????Base(int?b1,int?b2)??
????{??
???????printf("base?create?n");??
???????this->b1?=?b1;??
???????this->b2?=?b2;??
????}??
????~Base()???
????{??
????????printf("base?destroy?n");???
????}??
};??
??
??
class?Test??
{??
private:??
????int?t1;??
????Base?b;??
public:??
????Test(int?b1,int?b2,int?t1):b(b1,b2)??
????{??
????????printf("test?create?n");??
????????this->t1?=?t1;??
????}??
????~Test()??
????{??
???????printf("test?destroy?n");??
????}??
};??
??
??
??
??
int?_tmain(int?argc,?_TCHAR*?argv[])??
{??
????Test*?test?=?new?Test(1,2,3);??
??????
????delete?test;??
??
??
????int?in;??
????scanf("&d",in);??
}??
結(jié)果:
base create
test create
test destroy
base destroy
例子:拷貝構(gòu)造函數(shù)與組合類構(gòu)造函數(shù)混用
[cpp]?view
plain?copy
#include?"stdafx.h"??
#include?