基本概念
默认复制构造函数 与 默认构造函数的区别(默认的无参构造函数)
注意 不允许有形如 x::x(x) 的复制构造函数
class CSample
{
CSample(CSample)//参数只能是引用 不能是对象
{
}//错,不允许这样的构造函数
}
复制构造函数起作用的三种情况
(1)当用一个对象去初始化同类的另一个对象时。
//方法一
Comple c2(c1);
//方法二
Comple c2 = c1;//初始化语句 非赋值语句
Comple c1(9), c2;
c2 = c1;//并没有调用复制构造函数 因为c2已经被初始化过了
//c2调用了无参构造函数
(2)如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数将被调用。
void doWork(Person p2)
{
}
void test()
{
Person p;
doWork(p);//在参数传递的过程中 会调用p2的复制构造函数
}
(3)如果函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用。
Person doWork()
{
Person p1;
return p1;//调用的并不是p1的复制构造函数 而是临时变量的复制构造函数
}
void test()
{
Person p = dowork();
}