1

たとえば、これでは、このポインタについてはよくわかりません。この質問は、operator +のオーバーロードについてではなく、このポインタと、クラス間の関係についてです。

*このポインタは何を指しますか?

ありがとうございます!

 class Integer {
        int i;
    public:
        Integer(int ii): i(ii) { }
        const Integer operator+(const Integer& rv) const {
            cout<<"operator+"<<endl;
        }

        Integer&
            operator+=(const Integer& rv) {
                i += rv.i;
                return *this;
        }

    }
4

2 に答える 2

3

operator+=次のようなコードを記述できるように、現在のオブジェクトへの参照を返す必要があります(インクリメントされた後)。

// UGLY CODE, ONLY TO ILLUSTRATE A POINT
Integer x, y;
x = (y += 10) + 1;

この形式の演算子(参照を取得し、const参照を返す)は、標準形とも呼ばれます。

どこに戻るための参照を取得しますか?this現在のオブジェクトを指すがありますが、ポインタを返すことはできません。したがって、ポインタを間接参照しoperator*て結果を返します。

return *this;
于 2012-04-07T10:10:36.533 に答える
3

this特別なタイプのポインタを識別します。クラスAのxという名前のオブジェクトを作成し、クラスAに非静的メンバー関数f()がある場合。関数xf()を呼び出すと、f()の本体にあるキーワードthisは、xのアドレスを格納します。このポインタを宣言したり、割り当てたりすることはできません。基本的にthis、ポインターはすべての非静的メンバー関数呼び出しに隠し引数として渡され、すべての非静的関数の本体内のローカル変数として使用できます。

于 2012-04-07T10:16:49.993 に答える