1、拷贝构造函数是用一个已存在的对象去初始化另一个需要新建的对象,即用已经存在的对象初始化新建对象。
2、拷贝构造函数的写法类名 (const 类名 &要拷贝的类名)
例如:
X是类的名称;
X(const X &p)
{
a_=p.a_,b_=p.b_;//这里必须要有
}
2、使用拷贝构造函数的情形
(1)
X (const X &p){}
int main()
{X p2=p1;}
(2)
X (const X &p){}
Line(Point &p):p1(p){}//这里调用了拷贝构造函数,前面没有调用拷贝构造函数,但是后面p1(p)这里调用了拷贝构造函数;
int main()
{
Point p2(p1);//这里会调用拷贝构造函数;
}
(3)以对象来作为参数并且必须是传值参数
X (const X &p){}
void f(X p){}//这里是传值参数,所以调用拷贝构造函数;
void f(X &p){}//不调用拷贝构造函数,因为都不生成新对象;
void f(X *p){}//不调用拷贝构造函数,因为都不生成新对象;
int main()
{
}
(4)返回类对象时会调用拷贝构造函数
X f1()
{
X p1(2,2);//对类的局部变量,p1在函数结束时释放,
return p1;//不会调用拷贝构造函数
}
改法一:
X f1()
{
statio X p1(1