赋值操作符重载的有关问题
赋值操作符重载的问题定义一个类,重载赋值操作符实现对象数据的赋值一般是这个样子的fun &operator(const
赋值操作符重载的问题
定义一个类,重载赋值操作符实现对象数据的赋值
一般是这个样子的
fun &operator=(const fun &a)
{
this->age=a.age;
return *this;
}
实验以后,发现这个也可以,想知道为什么一般都是用上面那个呢
下面的这个缺点在哪里
void operator=(const fun &a)
{
age=a.age;
}
谢谢大家
[解决办法]如果是a=b=c,第二个能行吗?
[解决办法]a=b等价于a.operator=(b),所以虽然返回void但仍然能用。
但对于链式赋值就会有问题,因为链式可以理解为这样 a=b=c 等价于 a.operator=(b.operator=(c))
如果=重载返回为void,那么就变成了 a.operator=(void),这个就和你定义的重载函数有出入了,缺少一个参数。
当然你可以不用chained call,只不过=的chained call已经被大家广泛接受了,如果只有你一个人用自然没问题,但如果是一个团队里的其他人使用了你的=重载,就会有其他问题了。因为他使用的是大家公认的版本,但你提供的缺无法满足这种需求。