c++成員函式分為靜態成員函式和普通成員函式,其中普通成員函式的實現中隱式包含了this指標作為其第乙個引數,所以導致兩者函式指標使用的差異,靜態成員函式指標與普通的外部函式指標使用基本一致,但普通成員函式指標型別的定義要包含類名的資訊:
#include class test
static void print (test & test)
void output ()
private:
int a;
int b;
};
int main()
注意上述**中,普通成員函式函式指標型別*前要加"類名::",靜態成員函式無此限制。
注意獲取乙個成員函式指標的語法要求很嚴格:
1、不能使用括號:例如&(test::output)錯誤;
2、必須有限定符:例如&output不對。即使在類test的作用域內也不行,必須加上限定符;
3、必須使用取位址符號:例如直接寫test::output不行(雖然普通函式指標可以這樣)。所以,必須要這樣寫:&classname::foo。
注意這裡成員函式指標已經開始顯示它「異類」的天性了。上面**中注釋a和b處兩個表示式,產生了乙個在c++裡面沒有型別的「東西」(這是c++語言裡面唯一的例外,其它任何東西都是有型別的),這就是.*和->*運算子運算產生的東西:
(test.*output)
(ptest->*output)
這兩個運算子求值生成的「東西」我們只知道可以把它拿來當函式呼叫一樣使喚,別的什麼也不能幹,甚至都不能把它存在某個地方。就因為這個原因,andrei alexandrescu 在他那本著名的《modern c++ design》裡面就說,成員函式指標和這兩個操作符號是「curiously half-baked concept in c++」。(5.9節)
c++裡面引入了「引用」(reference)的概念,可是卻不存在「成員函式的引用」,這也是乙個特殊的地方。(當然,我們可以使用「成員函式指標」的引用,呵呵)。
C 提高 成員函式指標
類物件的成員函式有時可以當作一般的 ansi c 函式一樣處理。正如可以宣告指向物件資料成員的一般指標一樣,也可以宣告指向物件成員函式的指標,然後通過該指標間接呼叫該函式。請看例1 例1 使用成員函式指標 class example long get time int main 這種表示法有點討厭。...
c 函式指標 成員變數
類 b中以函式指標動態設定執行函式fun,執行函式fun內部會呼叫成員變數a a 是類a的例項 的方法 include include class a void disp class b void setfun char name else if 0 strcmp name,disp void sh...
C 類成員函式指標
使用類成員函式指標需要掌握的三點。1 申明類成員函式指標 2 通過物件指標呼叫類函式指標 3 通過物件呼叫類函式指標 例 定義基類和子類 class base virtual void print2 class derived public base virtual void print2 申明類成...