Cpp クラス thisポインタ 新しいページはコチラ
提供: yonewiki
(→クラス thisポインタ) |
(→クラス thisポインタ) |
||
| 24行: | 24行: | ||
例えば、わかりやすい例で示せば、以下のような感じのプログラムを動かすことで自分自身という表現の意味を理解できるやもしれません。 | 例えば、わかりやすい例で示せば、以下のような感じのプログラムを動かすことで自分自身という表現の意味を理解できるやもしれません。 | ||
| + | |||
| + | |||
| + | ThisPointer001.h | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #pragma once | ||
| + | class CThisPointer001 | ||
| + | { | ||
| + | public: | ||
| + | CThisPointer001(void); | ||
| + | ~CThisPointer001(void); | ||
| + | }; | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | ThisPointer001.cpp | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #include "stdafx.h" | ||
| + | #include "ThisPointer001.h" | ||
| + | |||
| + | |||
| + | CThisPointer001::CThisPointer001(void) | ||
| + | { | ||
| + | printf("this Address =%08x\n",this);//★1.thisポインタのアドレス出力 | ||
| + | } | ||
| + | |||
| + | |||
| + | CThisPointer001::~CThisPointer001(void) | ||
| + | { | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | Sample_Main.cpp | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #include "stdafx.h" | ||
| + | #include "ThisPointer001.h" | ||
| + | |||
| + | int _tmain(int argc, _TCHAR* argv[]) | ||
| + | { | ||
| + | CThisPointer001* CThisPointer001_Instance = new CThisPointer001; | ||
| + | printf("CThisPointer001_Instance Address=%08x\n",CThisPointer001_Instance);//★2.変数のアドレス出力 | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | またしても、サンプルが長くなってしまいましたが、辛抱強く試してみた人がいたとしたら、実行結果は以下のようになったでしょう。 | ||
| + | |||
| + | |||
| + | 出力結果 | ||
| + | <syntaxhighlight lang="text"> | ||
| + | this Address =00579108 | ||
| + | CThisPointer001_Instance Address=00579108 | ||
| + | </syntaxhighlight> | ||
| + | ★1.と★2.でthisポインタの出力と生成したクラスオブジェクトの変数のアドレスが一致しました。これが自分自身ということの意味になります。だから?何ができるのか? | ||
| + | |||
| + | |||
| + | 例えば、thisポインタを使って、メンバ関数やメンバ変数を呼び出すことができます。でも、thisポインタを使わなくても呼び出せていました。そしたらthisポインタってのは何の役に立つのか?それはですね。自分自身の中の何かのメンバ変数やメンバ関数であることを明示しなければならない場合があるということにつきます。たとえば[[Cpp クラス メンバ関数ポインタ|メンバ関数ポインタ]]で明示しなければならないパターンを示しました。 | ||
| + | |||
| + | |||
| + | 自動的に作られるthisというキーワードのポインタ変数は、意図的にthisポインタと同じものを作ることができます。 | ||