通過函式指標呼叫乙個函式的時候,此函式必須有具體的位址,因此當呼叫乙個類成員函式的時候,此成員函式必須宣告為static,即靜態成員函式,這樣就能通過函式指標獲取到成員函式的位址,進而呼叫。
關於靜態成員函式:
編譯器在編譯乙個普通成員函式時,會隱式地增加乙個形參this,並把當前物件的位址賦值給this,所以普通成員函式只能在建立物件後通過物件來呼叫,因為它需要當前物件的位址。而靜態成員函式可以通過類來直接呼叫,編譯器不會為它增加形參this,它不需要當前物件的位址,所以不管有沒有建立物件,都可以呼叫靜態成員函式。
普通成員函式必須通過物件才能呼叫,而靜態成員函式沒有this指標,無法在函式體內部訪問某個物件,所以不能呼叫普通成員函式,只能呼叫靜態成員函式。靜態成員函式與普通成員函式的根本區別在於:普通成員函式有this指標,可以訪問類中的任意成員;而靜態成員函式沒有this指標,只能訪問靜態成員(包括靜態成員變數和靜態成員函式)。
注意!注意!注意!
宣告類成員函式為靜態函式,才可以通過函式指標進行呼叫!!!
以下是呼叫類成員函式的具體實現:
#include
using
namespace std;
// 宣告函式指標
typedef
int(
*func)
(int a,
int b)
;// 宣告乙個類
class
calculate
;// 靜態成員函式的實現
int calculate::
addition
(int a,
int b)
// 靜態成員函式的實現
int calculate::
subtraction
(int a,
int b)
// 引數為函式指標,去呼叫類成員函式
void
getresult
(func f)
intmain()
函式輸出
3
-1
謝謝閱讀 通過函式指標呼叫函式
指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...
通過函式指標呼叫函式
指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...
類成員函式呼叫
大家都知道c 的虛函式前必須加virtual,但如果一連串的繼承下來,有的忘了加virtual會出現什麼情況呢?為了滿足我的好奇心,做了點實驗然後有了本文,僅僅是好玩,沒有啥實際意義。本文只給出vs2005的情況 首先,如果是單一類,沒加virtual的話那麼好辦,直接call a fun,非sta...