通過函式指標呼叫類成員函式的方法

2021-10-10 16:27:24 字數 1083 閱讀 4925

通過函式指標呼叫乙個函式的時候,此函式必須有具體的位址,因此當呼叫乙個類成員函式的時候,此成員函式必須宣告為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...