# 成員函式指標（Pointer to member function）

int (SafeArray::*mfPtr1)(int) = 0;
void (SafeArray::*mfPtr2)(int, int) = 0;

typedef void (SafeArray::*MFPTR1)(int, int);
typedef int (SafeArray::*MFPTR2)(int);

MFPTR1 mfPtr1 = 0;
MFPTR2 mfPtr2 = 0;

mfPtr1 = &SafeArray::set;
mfPtr2 = &SafeArray::get;

SafeArray safeArray(10);

// 以下與safeArray.set(2, 10) 相同

(safeArray.*mfPtr1)(2, 10);

// 以下的成員函式呼叫部份與safeArray.get(2)相同
cout << (safeArray.*mfPtr2)(2) << endl;

"." 運算子之後使用*對指標取值，括號是給定引數。如果是物件指標的話，則可以如下：
SafeArray *safePtr = &safeArray;
// 以下相當於safePtr->set(2, 100)
(safePtr->*mfPtr1)(2, 100);

• main.cpp
``#include <iostream>#include "SafeArray.h"using namespace std;int main() {    //int (SafeArray::*mfPtr1)(int) = 0;    //void (SafeArray::*mfPtr2)(int, int) = 0;    typedef void (SafeArray::*MFPTR1)(int, int);     typedef int (SafeArray::*MFPTR2)(int);    MFPTR1 mfPtr1 = 0;    MFPTR2 mfPtr2 = 0;     mfPtr1 = &SafeArray::set;    mfPtr2 = &SafeArray::get;     SafeArray safeArray(10);     for(int i = 0; i < safeArray.length; i++) {        (safeArray.*mfPtr1)(i, (i+1)*10);    }     for(int i = 0; i < safeArray.length; i++) {        cout << (safeArray.*mfPtr2)(i) << " ";    }    cout << endl;     SafeArray *safePtr = &safeArray;     (safePtr->*mfPtr1)(2, 100);     for(int i = 0; i < safePtr->length; i++) {        cout << (safePtr->*mfPtr2)(i) << " ";    }    cout << endl;     return 0;}``

10 20 30 40 50 60 70 80 90 100
10 20 100 40 50 60 70 80 90 100