0

つまり、クラス定義内でオーバーロードした場合、operator+またはoperator=これは?に何らかの影響を及ぼしoperator+=ますか?およびその逆。

または、特に定義されていない限り、これらの演算子は完全に独立していますか?

4

3 に答える 3

5

いいえ、これらの演算子は完全に独立しています。

もちろん、他のものを使用して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
于 2013-01-22T12:41:18.367 に答える
2

言語はこれについて制限を課していません-2つのオブジェクトを合計する演算子+と太陽を爆破する+=を持つことができますが、それでも合法です。一方、直感に反する演算子のオーバーロードを考え出さないことを強くお勧めします。そうしないと、クラスの使用が非常に厄介になります。

ちなみに、コードの重複を避けるために、+は+=の観点から実装されることがよくあります。

A operator+(const A& right) const
{
    A ret(*this);
    ret+=right;
    return ret;
} 
于 2013-01-22T12:47:27.683 に答える
0

いいえ、その動作を行う場合は、+=演算子もオーバーライドする必要があります。

于 2013-01-22T12:42:17.733 に答える