1

私の質問は、クラスを持つポインターとキーワード this に言及しています。

class class1 {
public:
    bool isitme(class1& temp){
        if(this == &temp)
            return true;
        else return false;
    }
};


int main () {
    class1 c3;
    class1* c2 = &c3;
    if(c3.isitme(*c2))
        cout << "c3 == c2"; //it is returning that
    system("pause");
}

上記のコードは機能していますが、私が理解していないのは、bool isitme(class1& temp)if(this == &temp)が同じ関数にある場合にのみ機能する理由isitme()です。

つまり、クラス パラメータで tempのメモリ ブロックを既に読み取っており、class1& tempそのメモリ ブロックをキーワード と比較できるはずthisです。this == &temp参照 ( )を二重に取得した場合にのみ関数が真になるのはなぜですか?

ありがとう

4

6 に答える 6

5

thisはポインタですtempが、 は参照です。&tempあなたifが声明に書くとき、あなたはのアドレスを取っていますtemp。これにより、 と比較できるポインターに変換されthisます。

于 2013-03-16T22:44:03.170 に答える
1

C/C++ の時代からしばらく経ちましたが、これを試してみましょう...

参照演算子を 2 回使用していません。指定するclass1&と、パラメータの型を指定するだけで (型は「型の参照class1」)、実際には何もしませんtemp。後で実際にパラメータを逆参照します&temp。実際に参照演算子であるのは、アンパサンドの 2 番目の出現だけです。

于 2013-03-16T22:44:11.653 に答える
0

メソッド宣言内の&演算子は、渡されたオブジェクトをコピーするのではなく、渡されたオブジェクトと同じ場所を指していることを意味します (これは参照です)。&in 演算子は、そのif(this == &temp)オブジェクト (ポインター) のアドレスを実際に取得してthisポインターと比較できるようにするために必要です。

于 2013-03-16T22:45:07.410 に答える
0

メソッドの署名の「演算子」isitmeという参照は、参照、つまりオブジェクト自体のエイリアスを示します。

一方、行if(this == &temp)では、演算子はオブジェクトに対して直接使用されているため、オブジェクトのアドレス (オブジェクトへのポインター) を返します。

したがって、入力された参照が と等しいかどうかを確認したい場合はthis、ポインターと比較する必要があります。これは、参照演算子が返すものとまったく同じです。

于 2013-03-16T22:45:56.127 に答える
0

&クラス パラメーター リスト内の は、オブジェクトが参照によって渡されることを意味します。つまり、オブジェクトtempのエイリアスです。は単にそのオブジェクトのアドレスを取得し、それを が指すオブジェクトと比較しています。2 つの構文は意味的に異なります。アドレスを 2 回取得することはありません。class1&tempthis

于 2013-03-16T22:48:12.570 に答える