メンバ変数ポインタ
ロベールのC++入門講座 13-17
メンバ関数のポインタは以前勉強しました。
実はメンバ変数もポインタを取ることができます。
#include <iostream> using std::cout; using std::endl; class CSample { public: int m_x; int m_y; CSample(int x,int y) { m_x = x; m_y = y; } }; int main () { CSample obj(10,20); // メンバ変数ポインタ int CSample::*pData = &CSample::m_x; // ポインタ経由でメンバ変数の値を表示 cout << obj.*pData << endl; return 0; }
$ main 10
呼び出し方はメンバ関数ポインタとあまりかわりませんね。
ちなみにこのメンバ変数ポインタですが、どちらかというとクラスではなく、構造体の場合に使うことが多いようです。
確かにクラスの場合、そもそもメンバ変数はprivateにしていることが殆どなのであまり使わないということですね。
以下、構造体で実装してみた場合の例です。
#include <iostream> using std::cout; using std::endl; struct CData { int m_x; int m_y; }; int main () { CData obj = {10,20}; int CData::*pData = &CData::m_x; cout << obj.*pData << endl; return 0; }
$ main 10