调用拷贝构造函数的三种情况
拷贝构造函数:
PersonInfo(PersonInfo &obj)
{
name = new char[strlen(obj.name)+1];
strcpy(name, obj.name);
age = obj,age;
cout<<"调用拷贝构造函数"<<endl;
}
1 用对象初始化同类型的另一个对象
PersonInfo s1("Zhangsan", 20);
PersonInfo s2(s1), s3 = s1;
2 如果函数的形参是对象,当进行参数传递时将调用拷贝构造函数
void changePerson( PersonInfo p )
{
...
}
void main()
{
PersonInfo s1("Susan", 20);
changePerson(s1);
}
另外,拷贝构造函数的参数一定是一个引用,而不是对象,否则会造成拷贝构造函数自身的无限调用
3 如果函数的返回值是对象,函数执行结束时,将调用拷贝构造函数对无名临时对象初始化
PersonInfo getPerson()
{
PersonInfo person;
return person;
}
void main()
{
PersonInfo student;
student = getPerson();
}