c++_拷贝构造函数

拷贝构造又叫复制构造;若是没有实现拷贝构造函数,c++会自动生成一个,叫作隐式拷贝构造函数.该自动生成的隐式拷贝构造也能应付绝大部分状况.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;  
}

拷贝构造函数的调用:code

1)一个对象用于给另一个对象进行初始化(常称为赋值初始化);对象

CTest testA = new CTest(10,20);
CTest testB = testA ;
或者
CTest TestC(testA );

2)一个对象做为函数参数,以值传递的方式传入函数体;get

//参数是对象,是值传递,会调用拷贝构造函数  
int GetValue(CTest aa)    
{  
    return aa.getX();  
} 


//错误示范:若是参数是引用类型,自己就是引用传递,因此不会调用拷贝构造函数 
int GetValue(CTest & aa)   
{  
    return aa.getX();  
}

3)一个对象做为函数返回值,以值传递的方式从函数返回;class

//返回值是对象类型,会调用拷贝构造函数。会调用拷贝构造函数,由于函数体内生成的对象aa是临时的,离开这个函数就
//消失了。全部会调用拷贝构造函数复制一份。
CTest GetX()        
{  
    CTest aa(11,20);  
    return aa;  
}  


//会调用拷贝构造函数,由于函数体内生成的对象aa是临时的,离开这个函数就消失了。全部会调用拷贝构造函数复制一份。 
CTest & GetX()    
{  
    CTest  aa(1);  
    return aa;  
}
相关文章
相关标签/搜索