一,定义copy构造函数应注意的问题
下面定义一个Student类,这个类的copy构造函数的参数是类对象不是对象的引用
class Student{
private:
string name;
int age;
public:
Student(const string &, int age):name(name), age(age){}
//copy构造函数的参数是类对象,不是对象的引用
Student(Student re){
name = re.name;
age = re.age;
}
};
程序分析:
上面的代码在编译时就会出现下面的错误
error: invalid constructor; you probably meant 'Student (const Student&)
即使上面的代码能通过编译,在实际使用时也会遇到很大的问题,下面是具体的例子
int main() {
Student zhangsan("zahngsan", 20);
Student lisi = zhangsan;
return 0;
}
上面第二行的初始化操作,会循环的调用copy构造函数。
注意:
定义copy构造函数时,它的参数一定是对象的引用,而不能是类对象。