即如果在类定义中我重载operator+
或operator=
,这会对operator+=
产生影响吗?反之亦然。
或者这些运营商是否完全独立,除非另有定义?
答案 0 :(得分:5)
不,这些运营商是完全独立的。
你当然可以使用其他人实现一个,但默认情况下它们是独立的。
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
答案 1 :(得分:2)
语言对此没有任何限制 - 你可以有一个操作符+总和两个对象和一个+ =吹太阳,它仍然是合法的。另一方面,强烈建议不要提出违反直觉的运算符重载,否则你的类会非常难以使用。
顺便说一下,为了避免代码重复,经常用+ =:
来实现A operator+(const A& right) const
{
A ret(*this);
ret+=right;
return ret;
}
答案 2 :(得分:0)
不,如果您的行为是什么,您还需要覆盖+=
运营商!