應用拷貝建構函式的三種情況
阿新 • • 發佈:2019-02-07
#include<iostream.h>
class point
{
public:
point(int xx=0,int yy=0){X=xx;Y=yy;}
point(point &p);
int GetX(){return X;}
int GetY(){return Y;}
private:
int X,Y;
};
point::point(point &p)
{
X=p.X;
Y=p.Y;
cout<<"拷貝建構函式被呼叫"<<endl;
}
void fun1(point p)/*如果函式的形參是類的物件,呼叫函式時,進行形參和實參結合時,呼叫拷貝建構函式*/
{
cout<<p.GetX()<<endl;
}
point fun2()/*如果函式的返回值是類的物件,函式執行完成返回呼叫時*/
{
point A(1,2);
return A;/*函式的返回值是類的物件,返回函式值時,呼叫拷貝建構函式*/
}
void main()
{
point A(4,5);
point B(A);/*當用類的一個物件去初始化該類的另一個物件,用物件A初始化物件B,拷貝建構函式被呼叫*/
cout<<B.GetX()<<endl;
fun1(B);
B=fun2();
cout<<B.GetY()<<endl;
}
/*當類的資料成員中有指標型別時,預設的拷貝建構函式實現的只能是淺拷貝,這會帶來資料的不安全性,要實現正確的拷貝,也就是深拷貝,必須編寫拷貝建構函式*/