1. 程式人生 > >C++的靜態成員函式指標

C++的靜態成員函式指標

先簡單的說說非靜態的成員函式。 非靜態成員函式指標的型別:     類的非靜態成員是和類的物件相關的。也就是說,要通過類的物件來訪問變數。 成員函式的型別定義為:     typedef void (A::*pfunc)();  A是一個類,有一個成員函式void test();  使用:     pfunc p = A::test; 示例:
#include <iostream>

using namespace std;

class A {

public :
  void test1() { cout << "test" << endl; };
public :

};

typedef void (A::*PFunc)();

int main() {
  A a;
  PFunc f = &(A::test1);

  (a.*f)();

  system("PAUSE");
  return 0;
}
需要注意的是因為成員函式地址的解引用必須要附駐與某個物件的地址,所以我們必須建立某個物件,來呼叫這個函式。 靜態成員函式,可以通過類作用域符來訪問。 靜態成員函式的型別:靜態成員函式的地址可用普通函式指標儲存,而普通成員函式地址需要用 類成員函式指標來儲存。 typedef void (*pfunc) (); 這個和普通函式的指標是一樣的。 使用的時候也可以像普通函式一樣。 示例:
#include <iostream>

using namespace std;

class A {

public :
  static void test1() { printf("test\n"); };
public :

};

typedef void (*PFunc)();

int main() {
  PFunc f = &(A::test1);

  (*f)();

  system("PAUSE");
  return 0;
}
另外:靜態成員的初始化不受訪問控制的限制。               根據C++primer所說,要想確保物件只定義一次,最好的辦法就是把靜態資料成員的定義和其他非行內函數的定義放在同一個檔案中。