34章 メンバ関数ポインタ

http://www.geocities.jp/ky_webid/cpp/language/034.html

関数ポインタというのはC言語の時にならいました。

C++では更に、あるクラスのメンバ関数のポインタも得ることができます。

さっそく実装してみます。

#include <iostream>
using namespace std;

class CSample {
public:
    void func () {
        cout << "CSample::func" << endl;
    }
};

int main() {
    void (CSample::*pFunc)() = &CSample::func;
    
    CSample obj;
    
    // メンバ関数ポインタを使って関数呼び出し
    (obj.*pFunc)();
    
    return 0;
}
$ main
CSample::func

おお、なんか凄いですね。

まずメンバ関数ポインタの宣言ですが、CSample::*pFuncといったようにクラス名がついています。これはクラス名がないとどのクラスのメンバ関数かわからないからです。

で呼び出しですが、通常のメンバ関数名を各部分をポインタ変数に置き換えて括弧をつけただけです。

何故そのままpFuncで呼べないかというのはあくまでメンバ関数なので、どのインスタンスかを指定する必要があるからです。