thisポインタ


自分のオブジェクト

メンバ関数では、通常の関数とは異なりthisポインタが存在します
thisポインタとは、メンバ関数が実行された時のオブジェクトのポインタをさします

これまでメンバ関数内でメンバ変数を指すとき、メンバ変数を直接名指しで指名しましたが
実際はthisポインタを省略した形であると考えることができます
また、thisポインタはメンバ関数内で自分のオブジェクトを操作する時に必要になります
例えば、メンバ関数から他の関数に自分のオブジェクトを渡す時などに使用されます

thisポインタは、メンバ関数が開始された時から存在します
そのため、宣言などはなくメンバ関数内ではいつでも使用することができます
#include <iostream>
using namespace std;

class Kitty {
public:
	char *str;
	Kitty(char *str) { this->str = str; }
	void func() { cout << this->str; }
} obj[3] = { "Kitty on your lap\n" , "Di Gi Gharat\n" , "Card Captor Sakura\n" };

int main() {
	for (int i = 0 ; i < 3 ; i++) obj[i].func();
	return 0;
}
このプログラムでは、Kittyクラスの Kitty() コンストラクタ及び func() メンバ関数でthisが使用されています
thisはそのメンバ関数を実行しているオブジェクトそのものを意味します
すなわち this->str とは obj[i].str に等しいということです

上のように、thisを使う必要がない場所でthisポインタを使う人はいません
通常は、今までどおり省略型で行います
thisは、例えば自分自信のオブジェクトをメンバ関数から他の関数へ渡す時に使います
#include <iostream>
using namespace std;

class Kitty {
public:
	char *str;
	Kitty(char *str) { this->str = str; }
	void call();
} obj[3] = { "Kitty on your lap\n" , "Di Gi Gharat\n" , "Card Captor Sakura\n" };

void print(Kitty *obj) {
	cout << obj->str;
}

void Kitty::call() {
	print(this);
}

int main() {
	for (int i = 0 ; i < 3 ; i++) obj[i].call();
	return 0;
}
Kittyクラスのメンバ関数 call() は自分のオブジェクトを print() 関数に渡します
print()は受け取った Kitty オブジェクトのポインタのメンバ変数 str を出力します


this

メンバ関数内からしかアクセスできない、オブジェクトを表すポインタです
このポインタはメンバ関数の対象オブジェクトへのポインタを格納しています
クラスのメンバを参照するときも this ポインタを使えますが、実際は不要です



前のページへ戻る次のページへ