即,如果在类定义中我重载operator+
或者operator=
这对operator+=
? 反之亦然。
还是这些运算符完全独立,除非另有定义?
不,这些运营商是完全独立的。
您当然可以使用其他实现一个,但默认情况下它们是独立的。
struct X
{
X& operator = (const X&);
X operator + (const X&) const;
//X& operator += (const X& other)
// { operator=(operator+(other)); return *this; }
};
X x, y;
x += y; //doesn't compile unless you uncomment that line
该语言对此没有任何限制——你可以有一个运算符 + 对两个对象求和,一个 += 会炸毁太阳,它仍然是合法的。另一方面,强烈建议不要提出违反直觉的运算符重载,否则你的类会导致使用起来非常尴尬。
顺便说一句,为了避免代码重复,通常 + 以 += 的形式实现:
A operator+(const A& right) const
{
A ret(*this);
ret+=right;
return ret;
}
不,如果你有什么行为,你还需要重写+=
操作符!