读书人

赋值操作符重载的有关问题

发布时间: 2013-11-25 13:22:27 作者: rapoo

赋值操作符重载的问题
定义一个类,重载赋值操作符实现对象数据的赋值
一般是这个样子的

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已经被大家广泛接受了,如果只有你一个人用自然没问题,但如果是一个团队里的其他人使用了你的=重载,就会有其他问题了。因为他使用的是大家公认的版本,但你提供的缺无法满足这种需求。

读书人网 >C++

热点推荐