调用复制构造函数的三种情况:
1.当用类一个对象去初始化另一个对象时。
2.如果函数形参是类对象。
3.如果函数返回值是类对象,函数执行完成返回调用时。
#include <iostream>
using namespace std;
class Test{
public:
Test(){ }
//复制构造函数
Test(const Test &t) {cout<< 1;}
};
//传参是对象的引用,不调用复制构造函数。
//传参是对象,调用复制构造函数。
Test fun1(Test &u)
{
Test t=u; //初始化时用=号,就是Test t(u); 调用复制构造函数。而在赋值语句中的=号,不调用。像 Test x,y; x=y;
return t; //返回值是对象,调用复制构造函数
}
Test& fun2(Test &u)
{
Test t=u;
return t; //返回值是对象的引用,不调用复制构造函数
}
Test fun3(Test u)
{
Test t=u;
return t; //返回值是对象,调用复制构造函数
}
int main()
{
Test x,y;
x=fun1(y);
cout<< "\n---------------\n";
x=fun2(y);
cout<< "\n---------------\n";
x=fun3(y);
cout<<endl;