一.什么是赋值构造函数
当程序执行f2=f1时,自动调用赋值构造函数,也是浅拷贝(位拷贝).
如下代码:
Human f1, f2;
f2 = f1;
f1.description();
f2.description();
cout << "------------------" << endl;
f1.setAddr("新加坡");
f1.description();
f2.description();
如图所示,当f1赋值给f2后,f1数据改变,f2也跟着改变,这是很不安全的.
二.如何解决浅拷贝带来的问题
*进行深拷贝,即"="运算符重载函数,用strcpy_s(addr,ADDR_LEN,other.addr);来进行深拷贝*
代码如下:
Human &operator=(const Human &other);
Human &Human::operator=(const Human &other) {
//f1=f1;自己赋给自己,无意义,this是该对象的指针,&取地址赋给this指针
if (this==&other) {
return *this;
}
//比如执行:f1=f2
//就会调用:f1.operator=(f2);
name = other.name;
age = other.age;
salary = other.salary;
//深拷贝
strcpy_s(addr,ADDR_LEN,other.addr);
return *this;
}
## 三.什么时候用赋值构造函数
*显而易见,但对象之间进行赋值操作时,需要用到赋值构造函数.*