概念
- 只有一個(gè)參數(shù)请契,即對(duì)同類對(duì)象的引用。
- 形入 X::X(X&)或者 X::X(const X &)涌韩,二者選一,后者能以常量對(duì)象作為參數(shù)臣樱。
- 如果沒(méi)有定義賦值構(gòu)造函數(shù)腮考,那么編譯器生成默認(rèn)賦值構(gòu)造函數(shù)。默認(rèn)的復(fù)制構(gòu)造函數(shù)完成復(fù)制功能踩蔚。
class A{
private :
double real,image;
};
A c1; //調(diào)用缺省無(wú)參構(gòu)造函數(shù)
A c2(c1);//調(diào)用缺省的賦值構(gòu)造函數(shù)馅闽,將 c2初始化成和 c1一樣
- 如果定義的自己的復(fù)制構(gòu)造函數(shù),則默認(rèn)的復(fù)制構(gòu)造函數(shù)不存在福也。
class Complex{
public:
double real,image;
Complex(){}
Complex(const Comples &c){
real = c.real;
imag = c.imag;
cout<<"Copy Constructor called";
}
};
//調(diào)用
Complex c1;
Complex c2(c1);
- 不允許有形如 X::X(X)的構(gòu)造函數(shù)。參數(shù)一定是本類的引用庄涡,不能是本類的對(duì)象搬设。
class CSample{
CSample(CSample c){
}//錯(cuò)撕捍,不允許這樣的構(gòu)造函數(shù)
}
- 復(fù)制構(gòu)造函數(shù)起作用的三種情況
- 1)當(dāng)一個(gè)對(duì)象去初始化同類的另一個(gè)對(duì)象的時(shí)候泣洞。
Complex c2(c1);
Complex c2 = c1;//初始化語(yǔ)句,非復(fù)制語(yǔ)句
c2 = c1;//賦值語(yǔ)句
- 2)如果某函數(shù)有一個(gè)參數(shù)是類 A 的對(duì)象球凰,那么該函數(shù)被調(diào)用時(shí),類 A 的復(fù)制構(gòu)造函數(shù)將被調(diào)用缘厢。
class A
{
public:
A() {};
A(A & a){
cout<<"Copy constructor called"<<endl;
}
};
void Func(A a1){}
int main(){
A a2;
Func(a2);
return 0;
}
- 3) 如果函數(shù)的返回值是類 A 的對(duì)象時(shí)甩挫,則函數(shù)返回時(shí),A 的賦值構(gòu)造函數(shù)被調(diào)用:
A Func(){
A b(4);
return b;
}
int main(){
cout<<Func().v<<endl;
return 0;
}
- 為什么要自己寫賦值構(gòu)造函數(shù)英遭?
//參數(shù):參數(shù)的傳遞會(huì)默認(rèn)調(diào)用復(fù)制構(gòu)造函數(shù)
void func(A a){cout <<"good"<<endl;}
//返回值:會(huì)默認(rèn)調(diào)用復(fù)制函數(shù)
A func(){A tmp;return tmp;}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者