首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-11-25 
赋值操作符重载的问题定义一个类,重载赋值操作符实现对象数据的赋值一般是这个样子的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已经被大家广泛接受了,如果只有你一个人用自然没问题,但如果是一个团队里的其他人使用了你的=重载,就会有其他问题了。因为他使用的是大家公认的版本,但你提供的缺无法满足这种需求。

热点排行