Cpp クラス メンバ変数ポインタ 新しいページはコチラ
提供: yonewiki
(→クラス メンバ変数ポインタ) |
|||
11行: | 11行: | ||
<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=100> | ||
+ | #include "stdafx.h" | ||
+ | #include "CMemberPVal.h" | ||
+ | |||
+ | void CMemberPVal::CMemberPVal(int iArgData){ | ||
+ | void *pfuncSet = &CMemberPVal::SetData(int); | ||
+ | pfuncSet(iArgData); | ||
+ | } | ||
+ | void CMemberPVal::Set(int iArgData){ | ||
+ | int* m_piData = &CMemberPVal::m_iData; | ||
+ | *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という関数を参照して、コンストラクタ引数を設定するように呼び出しています。 | ||
+ | |||
+ | もっと有意義な使い方についての説明はまた今度ですね。 | ||
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |