C 的成員函式指標簡要

2021-05-23 10:04:14 字數 889 閱讀 6501

c++的成員變數指標和普通的指標沒有什麼大的區別,int型別成員變數的指標就是和int *, foo型別的成員變數的指標就是foo *,但是成員函式就不大一樣了,主要是因為非靜態成員函式實際上都隱藏這乙個呼叫物件的指標的引數。

靜態成員函式指標,和普通的c函式指標沒什麼兩樣

class foo

;int (*fp)() = foo::foo();

因為靜態成員函式的執行和類的物件無關,也沒有隱藏的物件指標引數

非靜態成員函式,因為有隱藏的物件指標引數,就有點不一樣

class foo

;為了**的簡潔,最好用typedef先定義指標型別

typedef int (foo::*fptype1)(); //foo類返回型別為int,引數列表為空的成員函式指標型別

typedef int (foo::*fptype2)(long); //foo類返回型別為int,引數列表為long的成員函式指標型別

然後就可以宣告指向成員函式的指標

fptype1 fp1 = &foo::foo1;

fptype2 fp2 = &foo::foo2;

通過成員函式呼叫的時候注意,因為非靜態的成員函式執行實際上是需要乙個類物件的

foo f;

int result = (f.*fp1)();

或者通過物件指標

foo f2 = &f;

int result2 = (f2->*fp1)();

類物件的成員函式能夠提供靈活的對成員函式的呼叫,今天寫乙個測試程式,為了這個測試程式的「擴充套件性」,研究成員函式指標花了一些時間,最後還是用別的方法來實現「擴充套件性」。雖然c++提供了這種個功能,我覺得還是盡量不要使用的好,程式不大容易讀,就算我懂,將來維護**的同僚未必明白,所以成員函式指標,能不用還是不用的好。

C 的成員函式指標簡要

c 的成員變數指標和普通的指標沒有什麼大的區別,int型別成員變數的指標就是和int foo型別的成員變數的指標就是foo 但是成員函式就不大一樣了,主要是因為非靜態成員函式實際上都隱藏這乙個呼叫物件的指標的引數。靜態成員函式指標,和普通的c函式指標沒什麼兩樣 class foo int fp fo...

C 成員函式指標

c 成員函式分為靜態成員函式和普通成員函式,其中普通成員函式的實現中隱式包含了this指標作為其第乙個引數,所以導致兩者函式指標使用的差異,靜態成員函式指標與普通的外部函式指標使用基本一致,但普通成員函式指標型別的定義要包含類名的資訊 include class test static void p...

C 成員函式指標的應用

原文出處 c 中,成員指標是最為複雜的語法結構。但在事件驅動和多執行緒應用中被廣泛用於呼叫回叫函式。在多執行緒應用中,每個執行緒都通過指向成員函式的指標來呼叫該函式。在這樣的應用中,如果不用成員指標,程式設計是非常困難的。剛遇到這種語法時也許會讓你止步不前。但你會發現,使用恰當的型別定義之後,複雜的...