Cpp クラス メンバ変数ポインタのソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[C PlusPlus#C++からの技術|C++]]に戻る <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 /> == '''クラス メンバ変数ポインタ''' == メンバ変数へのポインタを作る方法があることに、メンバ関数の記事を作ってから気付きました。かれこれ5年前の話です。重い腰がようやく上がった感じでしょうか?ここに初めて来た人にはどうでもいいことかもしれませんが、更新速度、おそろしく低いです。5年かかってようやっとでメンバ変数の記事を書こうと思ったのです。恐ろしや。この遅さはギネスブックいけるんじゃね? いけないか… メンバ変数をポインタでアクセスするのって、そんなに特別なことなの?意外と特別なことなのです。あまり使わない方法だからかな?ちょっとややこしい記述になってしまうからかな?メンドクサイからかな? まずは、メンバ変数を保持するようなクラスのヘッダファイルを作ってみます。 <syntaxhighlight2 lang="cpp" line> #ifndef __MEMBERPVAL_H_YONET__ #define __MEMBERPVAL_H_YONET__ #if _MSC_VER > 1000 #pragma once #endif class CMemberPVal{ private: int m_iData; public: void CMemberPVal(int iArgData); int Get_Data(); void Set_Data(int iArgData); }; #endif </syntaxhighlight2> こんな感じでしょうか?サンプルなので、意味のないクラスになりましたね。これに意味のないメンバ変数ポインタを作ってみます。 <syntaxhighlight2 lang="cpp" line start=100> #include "stdafx.h" #include "CMemberPVal.h" void CMemberPVal::CMemberPVal(int iArgData){ void (CMemberPVal::*pfuncSet)(int); pfuncSet = &CMemberPVal::SetData; (this->*pfuncSet)(iArgData); } void CMemberPVal::Set(int iArgData){ int (CMemberPVal::*m_piData); m_piData = &CMemberPVal::m_iData; (this->*m_piData) = iArgData; } int CMemberPVal::Get(){ return m_iData; } </syntaxhighlight2> <syntaxhighlight2 lang="cpp" line start=200> #include "stdafx.h" #include "CMemberPVal.h" int main(){ CMemberPVal objCMemberPVal(119); return 0; } </syntaxhighlight2> こんな感じかな。使い方はメンバ関数ポインタと同じですね。Setというメンバ関数の中で、m_iDataというメンバ変数をあえてm_piDataというポインタ変数で参照して、引数に受け取ったiArgDataを代入しています。コンストラクタの方にはメンバ関数をメンバ関数ポインタでSetという関数を参照して、コンストラクタ引数を設定するように呼び出しています。 == '''109行目~111行目(CMmberPVal.cppプログラムファイル部)'''== <syntaxhighlight2 lang="cpp"> int (CMember::*m_piData); m_piData = &CMemberPVal::m_iData; (this->*m_piData) = iArgData; </syntaxhighlight2> 上記部分がメンバ変数ポインタを使っているところです。 もっと有意義な使い方についての説明はまた今度ですね。 [[C PlusPlus#C++からの技術|C++]]に戻る
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス メンバ変数ポインタ
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ