c++のthisポインタ


thisポインタ
プログラム設計では、関数メンバーを定義するときに特定のオブジェクトが現れないことが多いが、関数メンバーの定義では、依存するオブジェクトを処理することが多い.このため、c++言語はクラスごとの定義に抽象的なポインタ定数を設定します.thisポインタthisはキーワードです.エンティティ(entity)に属し、ポインタの右の値であり、class、struct、unionタイプの非静的メンバー関数/関数テンプレートclassポインタのみがアクセスでき、変調されたメンバーが属するオブジェクトを指します.静的メンバーではthisポインタは使用できません.(1)thisポインタはクラスのポインタタイプであり、クラスのオブジェクトアドレスを指します.(2)thisポインタは、クラスのオブジェクトが作成されたときに説明され、作成されます.
(3)thisポインタは、各クラスのメンバー関数に隠されている特殊なポインタ(コンストラクション関数とコンストラクション関数を含む)であり、メンバー関数で操作されているオブジェクトを指すために使用されます.
次に、thisポインタの例を示します.
#include<iostream>
using namespace std;
class S
{
	public:
			S(int x, int y)
			{
				this->x=x; this->y=y;
			}
			int Getx() 
			{ 
			cout<<"x=";
			return x;
			}
			
			int Gety() 
			{
			cout<<"y=";
			return y;
			}
	private:
			int x,y;
};
int main()
{
	S *p;
	S s(6 , 3);
	p=&s;
	cout<<p->Getx()<<endl;
	cout<<p->Gety()<<endl;
}
出力結果:
x=6
y=3
thisポインタを持つメンバー関数の使用
修飾子constを関数ヘッダの後に書き、関数ボディの前に、この関数が常メンバー関数であることを説明します.この場合のconstは、関数の戻り値ではなく、関数ボディでthisポインタが使用されていることを意味します.
例:
#include<iostream>
using namespace std;
class Myclass
{
	public:
		Myclass(int i, int j)
		{
			m1=i;
			m2=j;
		}
		int fun1() const { return m1;};
		int fun2() const { return m2;};
	private:
		int m1,m2;
};
int main()
{
	Myclass S(88, 66);
	cout<<"M1="<<S.fun1()<<endl;
	cout<<"M2="<<S.fun2()<<endl;
	return 0;
}

結果:
M1=88
M2=66