一 函數指針介紹函數
函數指針指向某種特定類型,函數的類型由其參數及返回類型共同決定,與函數名無關。舉例以下:spa
該函數類型爲int(int,int),要想聲明一個指向該類函數的指針,只需用指針替換函數名便可:指針
則pf可指向int(int,int)類型的函數。pf前面有*,說明pf是指針,右側是形參列表,表示pf指向的是函數,左側爲int,說明pf指向的函數返回值爲int。則pf可指向int(int,int)類型的函數。而add類型爲int(int,int),則pf可指向add函數。對象
注意:*pf兩端的括號必不可少,不然若爲以下定義:blog
二 標準C函數指針繼承
1函數指針的定義編譯器
1.1 普通函數指針定義string
1.2 使用typedef定義函數指針類型編譯
2函數指針的普通使用class
注意:add類型必須與pf可指向的函數類型徹底匹配
3函數指針做爲形參
形參中有函數指針的函數調用,以fuc爲例:
4返回指向函數的指針
4.1 使用typedef定義的函數指針類型做爲返回參數
4.2 直接定義函數指針做爲返回參數
說明:按照有內向外的順序閱讀此聲明語句。fuc2有形參列表,則fuc2是一個函數,其形參爲fuc2(int),fuc2前面有*,因此fuc2返回一個指針,指針自己也包含形參列表(int,int),所以指針指向函數,該函數的返回值爲int.
總結:fuc2是一個函數,形參爲(int),返回一個指向int(int,int)的函數指針。
二 C++函數指針
1因爲C++徹底兼容C,則C中可用的函數指針用法皆可用於C++
2 C++其餘函數(指針)定義方式及使用
2.1 typedef與decltype組合定義函數類型
decltype返回函數類型,add2是與add相同類型的函數,不一樣的是add2是類型,而非具體函數。
使用方法:
2.2 typedef與decltype組合定義函數指針類型
2.3 使用推斷類型關鍵字auto定義函數類型和函數指針
3函數指針形參
說明:不論形參聲明的是函數類型:void fuc2 (add2 add);仍是函數指針類型void fuc2 (PF2 add);均可做爲函數指針形參聲明,在參數傳入時,若傳入函數名,則將其自動轉換爲函數指針。
4 返回指向函數的指針
4.1 使用auto關鍵字
auto fuc2(int)-> int(*)(int,int) //fuc2返回函數指針爲int(*)(int,int)
4.2 使用decltype關鍵字
5 成員函數指針
5.1普通成員函數指針使用舉例
5.2繼承中的函數指針使用舉例
6重載函數的指針
6.1 重載函數fuc
6.2 重載函數的函數指針
注意:編譯器經過指針類型決定選取那個函數,指針類型必須與重載函數中的一個精確匹配。