Cpp クラス メンバ変数ポインタ 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(クラス メンバ変数ポインタ)
 
5行: 5行:
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス メンバ変数ポインタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス メンバ変数ポインタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
36行: 36行:
 
         int m_iData;
 
         int m_iData;
 
     public:
 
     public:
         void CMemberPVal(int iArgData);
+
         CMemberPVal(int iArgData);
 
         int Get_Data();
 
         int Get_Data();
 
         void Set_Data(int iArgData);
 
         void Set_Data(int iArgData);
45行: 45行:
 
 こんな感じでしょうか?サンプルなので、意味のないクラスになりましたね。これに意味のないメンバ変数ポインタを作ってみます。
 
 こんな感じでしょうか?サンプルなので、意味のないクラスになりましたね。これに意味のないメンバ変数ポインタを作ってみます。
  
<syntaxhighlight2 lang="cpp" line=100>
+
<syntaxhighlight2 lang="cpp" line start=100>
#include "stdafx.h"
+
#include <cstdio>
 
#include "CMemberPVal.h"
 
#include "CMemberPVal.h"
  
void CMemberPVal::CMemberPVal(int iArgData){
+
CMemberPVal::CMemberPVal(int iArgData){
     void *pfuncSet = &CMemberPVal::SetData(int);
+
     void (CMemberPVal::*pfuncSet)(int);
     pfuncSet(iArgData);
+
    pfuncSet = &CMemberPVal::SetData;
 +
     (this->*pfuncSet)(iArgData);
 
}
 
}
 
void CMemberPVal::Set(int iArgData){
 
void CMemberPVal::Set(int iArgData){
     int* m_piData = &CMemberPVal::m_iData;
+
     int (CMemberPVal::*m_piData);
     *m_piData = iArgData;
+
    m_piData = &CMemberPVal::m_iData;
 +
     (this->*m_piData) = iArgData;
 
}
 
}
 
int CMemberPVal::Get(){
 
int CMemberPVal::Get(){
63行: 65行:
  
 
<syntaxhighlight2 lang="cpp" line start=200>
 
<syntaxhighlight2 lang="cpp" line start=200>
#include "stdafx.h"
+
#include <cstdio>
 
#include "CMemberPVal.h"
 
#include "CMemberPVal.h"
  
74行: 76行:
 
 こんな感じかな。使い方はメンバ関数ポインタと同じですね。Setというメンバ関数の中で、m_iDataというメンバ変数をあえてm_piDataというポインタ変数で参照して、引数に受け取ったiArgDataを代入しています。コンストラクタの方にはメンバ関数をメンバ関数ポインタでSetという関数を参照して、コンストラクタ引数を設定するように呼び出しています。
 
 こんな感じかな。使い方はメンバ関数ポインタと同じですね。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++]]に戻る
 
[[C PlusPlus#C++からの技術|C++]]に戻る

2021年2月6日 (土) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス