|
拷贝构造又叫复制构造;如果没有实现拷贝构造函数,c++会自动生成一个,叫做隐式拷贝构造函数.该自动生成的隐式拷贝构造也能应付绝大部分情况.
拷贝构造函数的格式:
//定义
class CTest
{
public:
CTest(intxx=0,intyy=m)(X=xx;Y=yy;)
CTest(const CTest & p);
int getX(){return X;}
int getY(){return Y;}
private:
int X;
int Y;
};
//拷贝构造的实现
CTest::CTest(const CTest& p)
{
X = p.X;
Y = p.Y;
std::cout<<"拷贝构造函数调用"<<std::endl;
}
拷贝构造函数的调用:
1)一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
CTest testA = new CTest(10,20);
CTest testB = testA ;
或者
CTest TestC(testA );
2)一个对象作为函数参数,以值传递的方式传入函数体;
//参数是对象,是值传递,会调用拷贝构造函数
int GetValue(CTest aa)
{
return aa.getX();
}
//错误示范:如果参数是引用类型,本身就是引用传递,所以不会调用拷贝构造函数
int GetValue(CTest & aa)
{
return aa.getX();
}
3)一个对象作为函数返回值,以值传递的方式从函数返回;
//返回值是对象类型,会调用拷贝构造函数。会调用拷贝构造函数,因为函数体内生成的对象aa是临时的,离开这个函数就
//消失了。所有会调用拷贝构造函数复制一份。
CTest GetX()
{
CTest aa(11,20);
return aa;
}
//会调用拷贝构造函数,因为函数体内生成的对象aa是临时的,离开这个函数就消失了。所有会调用拷贝构造函数复制一份。
CTest & GetX()
{
CTest aa(1);
return aa;
} |
|