C++支持成员的指针储存,并且之后可以使用->*, .* 来调用。

#include <iostream>
using namespace std;

class Test
{
public:
    Test(int n=0) : aa(n) {}
    Test( const Test & M ): aa(M.aa) {}
    ~Test() {}
    
public:
    void Set( int n ) {
        aa = n;
    }
    
    void Print() {
        cout << aa << endl;
    }
    
    static void Yeah() {
        cout << "Yeah" << endl;
    }
    
private:
    int aa;
};

// typedef函数指针
typedef void (Test::*FuncPtrType)();

// 直接赋值
void (Test::*ptrSet)(int) = &Test::Set;

// 静态函数
void (*PStaticYeah)() = &Test::Yeah;

int main()
{
    // 静态函数不用与对象关联,所以在对象生成以前就能用
    PStaticYeah();
    Test * p = new Test(5);
    
    // ->*
    (p ->* ptrSet)( 10 );
    FuncPtrType ptrPrint = &Test::Print;
    (p ->* ptrPrint)();
    
    // .*
    ((*p) .* ptrSet)( 15 );
    ((*p) .* ptrPrint)();
    
    return 0;
}