手上没资料,没VC, 问个重载运算符的问题
在家呆了一段时间, 感觉状态很差了, 今天突然想起重载operator = 时返回*this, 而这个*this是作为一个引用的。
class Cls
{
public:
Cls& operator = (const Cls& obj)
{
....
return *this;
}
int m_mem;
};
int main()
{
Cls a, b, c;
b.m_mem = 10;
c.m_mem = 100;
a = b = c; //相当于 a = (b = c), a得到的应该是b的引用。
a.m_mem = 1000;//如果a是b的引用了, 那么这里不是把b的m_mem成员给改变了吗?
}
[解决办法]
a = b = c; 相当于:
a.operator=(b.operator=(c))
你下面这个说法是错误的:
a = b = c; //相当于 a = (b = c), a得到的应该是b的引用。
错在不是 "a得到的应该是b的引用 "
真实的情况是:b.operator=(c)返回b的引用成了a.operator=(?)的参数.a.operator=(?)仍然返回自己.