メンバ変数ポインタ

ロベールの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