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;
}