つまり、クラス定義内でオーバーロードした場合、operator+
またはoperator=
これは?に何らかの影響を及ぼしoperator+=
ますか?およびその逆。
または、特に定義されていない限り、これらの演算子は完全に独立していますか?
つまり、クラス定義内でオーバーロードした場合、operator+
またはoperator=
これは?に何らかの影響を及ぼしoperator+=
ますか?およびその逆。
または、特に定義されていない限り、これらの演算子は完全に独立していますか?
いいえ、これらの演算子は完全に独立しています。
もちろん、他のものを使用して1つを実装することもできますが、デフォルトではそれらは独立しています。
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
言語はこれについて制限を課していません-2つのオブジェクトを合計する演算子+と太陽を爆破する+=を持つことができますが、それでも合法です。一方、直感に反する演算子のオーバーロードを考え出さないことを強くお勧めします。そうしないと、クラスの使用が非常に厄介になります。
ちなみに、コードの重複を避けるために、+は+=の観点から実装されることがよくあります。
A operator+(const A& right) const
{
A ret(*this);
ret+=right;
return ret;
}
いいえ、その動作を行う場合は、+=
演算子もオーバーライドする必要があります。