Cpp クラス メンバ関数ポインタのソースを表示
新しいページはコチラ
移動:
案内
,
検索
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス メンバ関数ポインタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> </tr> </table> ※このページでは[[C PlusPlus|C++]]にのみ存在する機能として、記事タイトルが<nowiki>C++ クラス メンバ関数ポインタ</nowiki>になっています。<br /> <br /> == '''クラス メンバ関数ポインタ''' == メンバ関数ポインタは関数ポインタの拡張的な考え方だと思えば良いです。関数ポインタと全く同じではないので、使い方を覚えないと駄目です。といっても関数ポインタ自体もそれほど活用されているという風には思わない技術ですが、使ってる人は使ってるし、これをうまく使いこなす頭のいい人もいるのは確かです。というわけで、このクラスのメンバ関数ポインタも一応、抑えておきます。 関数ポインタと異なるのは、名前解決演算子('''::''')を使わないと駄目そうだということです。それは関数名を定義するときにも名前解決スコープ演算子を使わないといけないので、なんとなく予想できることです。でも具体的にはどうするべきなのか?ということになります。 具体的には以下のようになります。 FunctionPointer001.cpp <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "FunctionPointer001.h" void CFunctionPointer001::example_function1(int n,int m){ printf("example_function1 %d %d\n",n, m); } CFunctionPointer001::CFunctionPointer001(void) { void (CFunctionPointer001::*pfuncExample1)(int,int);//★1.メンバ関数ポインタ変数宣言 pfuncExample1 = &CFunctionPointer001::example_function1;//★2.変数に関数のアドレスを代入 //pfuncExample1 = example_function1;//ダメな例:これだとダメ (this->*pfuncExample1)(100,200);//★3.呼び出し } CFunctionPointer001::~CFunctionPointer001(void) { } </syntaxhighlight> FunctionPointer001.h <syntaxhighlight lang="cpp" line start="1"> #pragma once class CFunctionPointer001 { public: CFunctionPointer001(void); void example_function1(int n,int m); ~CFunctionPointer001(void); }; </syntaxhighlight> メインプログラムソース sample_main.cpp <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "FunctionPointer001.h" int _tmain(int argc, _TCHAR* argv[]) { printf("★メイン関数アドレス\n"); printf("%08x\n",_tmain); printf("\n"); CFunctionPointer001* CFunctionPointer001_Instance = new CFunctionPointer001; return 0; } </syntaxhighlight> FunctionPointer001.cppの10/11/15行目がメンバ関数ポインタを実際に利用しようとしている部分になります。サンプルを作ると、どうしてもどこが重要なのかわかり辛くなってしまうのは申し訳ないです。
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス メンバ関数ポインタ
に戻る。
個人用ツール
18.218.131.147
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ