#include<iostream>#include<cstdio>usingnamespacestd;
class Test
{
public:
double real,image;
public:
Test ()//无参构造函数
{
};
Test (double n)//含有一个参数的构造函数
{
real=n;image=n;
};
Test (const Test &c)//类Test的复制构造函数
{
real=c.real;
image=c.image;
cout<<"copy constructor called"<<endl;
};
};
//当用一个对象去初始化同类的另一个对象时,类Test的复制构造函数被调用;
Test c1;
Test c2(c1);
Test c3=c1;//在定义c3时为初始化语句,非复制语句,用复制构造函数用c1初始化c2;//如果某函数有一个是类Test的对象,那么该函数被调用时,类Test的复制构造函数被调用;void func_02(Test a)//此处的形参对象a是被主函数中的实参初始化的,调用复制构造函数;
{
}
//如果函数的返回值是类Test的对象时,则函数返回时,类Test的复制构造函数被调用;
Test func_03()
{
Test a(4);
return a;//将返回的对象a***初始化***主函数中的实参,调用复制构造函数;
};
//使用Test &引用类型作为参数,不会调用复制构造函数//如果希望确保实参的值在函数调用时不被改变,可以加上const 关键字;
Test func_04(const Test &a)//
{
cout<<"func_04"<<endl;
}
int main()
{
Test c4;
c4=c1;//此语句为赋值语句,并不会调用复制构造函数,只有在定义时,才是初始化操作;cout<<"step_01"<<endl;
Test a1;
func_02(a1);
cout<<"step_02"<<endl;
cout<<func_03().real<<endl;
cout<<"step_03"<<endl;
Test a3;
func_04(a3);
cout<<"step_04"<<endl;
return0;
}