thisポインターの概念を、できれば例を使って理解する必要があります。
私は C++ を初めて使用するので、理解できるように簡単な言語を使用してください。
thisポインターの概念を、できれば例を使って理解する必要があります。
私は C++ を初めて使用するので、理解できるように簡単な言語を使用してください。
thisそのクラスのインスタンスへのポインターであり、すべての非静的メンバー関数で使用できます。
fooプライベートメンバーとメソッドbarを持つクラスを宣言した場合、経由fooで利用できますが、bar経由this->fooで「部外者」は利用できませんinstance->foo。
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私たちが中にいたクラスをどのように意味するのでしょうか? クラス定義にオブジェクトのインスタンスがありません。オブジェクトではなくクラスです。
オブジェクト指向プログラミングでは、あるオブジェクトに対してメソッドを呼び出すと、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;
}