c++thisポインタ

1501 ワード

今日はいくつかの資料を調べて、今c++の中でthisのポインタをまとめます
このポインタの説明については、一般的に言語レベルから話します.
thisポインタは、メンバー関数が属するクラスで定義されたオブジェクトを指す暗黙パラメータとして非静的メンバー関数に渡されます.異なるオブジェクトが同じクラスのメンバー関数コードを呼び出すと、コンパイラはそのメンバー関数のthisポインタが指す異なるオブジェクトに基づいて、どのオブジェクトを参照すべきかのデータメンバーを決定します.
thisポインタは、各メンバー関数に隠されている特殊なポインタです.これは、メンバー関数によって操作されているオブジェクト、すなわちメンバー関数を操作するオブジェクトを指します.オブジェクトに対してメンバー関数を呼び出すと、コンパイラはまずオブジェクトのアドレスをthisポインタに割り当て、次にメンバー関数を呼び出し、メンバー関数がデータメンバーにアクセスするたびに、このポインタが暗黙的に作用します.通常、thisポインタはデータ・メンバーを明示的に参照するために使用されません.*thisを使用して、メンバー関数を呼び出すオブジェクトを識別することもできます.
さらに、次のクラスのメンバー関数について説明します.非静的関数メンバーは、オブジェクトのメモリを占有せず、C++コンパイラで処理された後、グローバル関数であり、最初のパラメータはthisポインタ、残りのパラメータタイプと名前であり、ユーザー定義と一致しています.
1)基本的な使い方
class Base
{
public:
	void test(int x)
	{
		this->x= x;
	}
public:
	int x;
};

2)constメンバー関数
class Base {
public:
	virtual void f()const { cout << "Base::f" << endl; }
};
lass Derive : public Base
{
public:
	virtual void f()  { cout << "Derive::f" << endl; }
};

実行:
Base* pBase = new Derive;  pBase->f();
その後の運行結果は何ですか?
Base::f
どうしてですか.
このconstは、隠されたthisポインタをconstタイプとして宣言するので、親クラスと子クラスに相当するf()関数には異なるパラメータがあります.つまり、子クラスはf()関数を遮蔽しており、ここでは多態性はありません.
接続を送って、thisポインタの紹介を補充します
1 thisポインタを深く検討する
http://blog.csdn.net/ugg/article/details/606396
2 thisポインタプローブ
http://bbs.csdn.net/topics/100069525
このポインタは秘密を探る