拷贝构造函数是构造函数的一种啊,并不存在冲突,它们的包含和被包含的关系。至于拷贝构造函数的用途,是在你产生临时对象,或者在复杂的复制语句当中的时候,代码会自动调用该函数,产生出一个对象供后面代码复制使用的。你没有的话,那么产生这个临时对象的时候就会出错,当然,你的代码只要不产生临时对象,拷贝构造函数要不要都无所谓了。并且,如果你的代码没有显示的添加构造函数,编译器会自动帮你生成一个默认的构造函数,一个拷贝构造函数和一个析构函数的。但是这些都是浅拷贝,遇到指针数据成员,就有出错的潜在危险了。
#include "iostream.h"
class CPoint
{
protected:
double x;
double y;
public:
CPoint(double x=0, double y=0);
void SetPoint(double x,double y);
void OutPut();
CPoint(CPoint& point);
};
void CPoint::OutPut()
{
cout<<x<<":"<<y<<endl;
}
CPoint::CPoint(double x, double y)
{
this->x=x;
this->y=y;
}
void CPoint::SetPoint(double x,double y)//拷贝构造函数,此处用的是深拷贝
{
this->x=x;
this->y=y;
}
CPoint::CPoint(CPoint& point)
{
cout<<"拷贝构造函数被调用"<<endl;
point.x=x;
point.y=y;
}
int main()
{
CPoint p1(1,1);
p1.OutPut();
CPoint p2(p1);
return 0;
}
给你一个例子吧