14

thisポインターの概念を、できれば例を使って理解する必要があります。

私は C++ を初めて使用するので、理解できるように簡単な言語を使用してください。

4

4 に答える 4

9

thisそのクラスのインスタンスへのポインターであり、すべての非静的メンバー関数で使用できます。

fooプライベートメンバーとメソッドbarを持つクラスを宣言した場合、経由fooで利用できますが、bar経由this->fooで「部外者」は利用できませんinstance->foo

于 2010-12-19T15:40:12.877 に答える
6

thisポインターは、クラス内でそれ自体を参照するために使用されます。それ自体への参照を返すときに便利なことがよくあります。代入演算子を使用した典型的な例を見てみましょう。

class Foo{
public:
    double bar;
    Foo& operator=(const Foo& rhs){
        bar = rhs.bar;
        return *this;
    }
};

時々物事が混乱した場合、私たちは言うかもしれません

this->bar = rhs.bar;

しかし、通常、その状況ではやり過ぎと見なされます。

次に、オブジェクトを構築しているが、含まれているクラスが機能するためにオブジェクトへの参照が必要な場合:

class Foo{
public:
    Foo(const Bar& aBar) : mBar(aBar){}

    int bounded(){ return mBar.value < 0 ? 0 : mBar.value; }
private:

    const Bar& mBar;
};

class Bar{
public:

      Bar(int val) : mFoo(*this), value(val){}

      int getValue(){ return mFoo.bounded(); }

private:

      int value;
      Foo mFoo;
};

Sothisは、オブジェクトを含まれているオブジェクトに渡すために使用されます。そうでなければ、this私たちが中にいたクラスをどのように意味するのでしょうか? クラス定義にオブジェクトのインスタンスがありません。オブジェクトではなくクラスです。

于 2010-12-19T15:43:44.860 に答える
3

オブジェクト指向プログラミングでは、あるオブジェクトに対してメソッドを呼び出すと、thisポインターはメソッドを呼び出したオブジェクトを指します。

たとえば、このクラスがある場合

class X {
public:
  X(int ii) : i(ii) {}
  void f();
private:
  int i;
  void g() {}
};

そしてそれのオブジェクト、そしてあなたは上でx呼び出すf()x

x.f();

内でX::f()thisを指しますx:

void X::f()
{
  this->g();
  std::cout << this->i; // will print the value of x.i
}

によって参照されるクラス メンバーへのアクセスthisは非常に一般的であるため、以下を省略できますthis->

// the same as above
void X::f()
{
  g();
  std::cout << i;
}
于 2010-12-19T15:53:34.033 に答える
1

ポインタは、プログラムのメモリ内の別の場所を指す変数型です。ポインターは、メモリー位置のアドレスのみを保持できます

画像

たとえば、「int ポインター」と言うと、int変数のメモリ アドレスを保持します。

「void ポインター」 -> 特定のデータ型ではない任意の型のメモリ アドレスを保持できます。

&演算子は、変数のアドレス (またはポイントされたポインターの値) を提供します。

于 2010-12-19T15:47:10.050 に答える