拷贝构造函数是一种特殊的构造函数,因为它也是用来构造对象的。它具有构造函数的所有特性。拷贝构造函数的作用是用一个已经存在的对象去初始化另一个对象,这两个对象的类类型应该是一样的。定义拷贝构造函数的形式是:
class 类名
{
public :
类名(形参); //构造函数
类名(类名 &对象名); //拷贝构造函数
...
};
类名::类(类名 &对象名) //拷贝构造函数的实现
{
函数体
}
拷贝构造函数的形参是本类的对象的引用。
拷贝构造函数在以下三种情况下会被调用:
a.当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。
int main()
{
Point A(1,2);
Point B(A); //拷贝构造函数被调用
cout<<B.GetX()<<endl;
return 0;
}
b.若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:
void fun1(Point p)
{
cout<<p.GetX()<<endl;
}
int main()
{
Point A(1,2);
fun1(A); //调用拷贝构造函数
return 0;
}
c.当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:
Point fun2()
{
Point A(1,2);
return A; //调用拷贝构造函数
}
int main()
{
Point B;
B=fun2();
return 0;
}