關於函數指針

以前去面試的時候被問道過函數的指針回調函數。都沒有回答上來== html

1.回顧下C++primer 的7.9節 指向函數的指針(順便回顧下第七章)面試

2.回調函數算法

3.動態建立對象數組

 

參考資料:C++Primer第四版7.9節函數

1.函數指針是指向函數類型的指針。而函數類型只由返回類型以及形參表肯定,跟函數名字無關。spa

用typedef簡化函數指針的定義:指針

//使用typedef簡化   定義函數指針p1和p2  一勞永逸~~~~視頻

typedef bool (*funp) (const string& , int);  htm

funp p1;  對象

funp p2;

//不使用typedef    定義函數指針p3和p4  

bool (*p3) (const string&, int);  

bool (*p4) (const string&, int);

函數指針的初始化和賦值:只能經過同類型的函數或者是函數指針(不一樣函數類型的指針不存在轉化)或者0值常量(表示不指向任何函數)進行初始化或者賦值

除了用做函數調用的左操做數外,對funp的任何使用都被解釋爲指針類型:bool  funp (const string&, int)------>bool(*) (const string&, int);  

 bool fun(const string&, int);
 p1 = 0;
 p2 = fun; //函數名自動解釋爲函數指針類型。就像數組名直接解釋爲數組指針?
 p3 = &fun;//直接引用函數名等效於在函數名上應用取地址操做符;
 p4 = p3;

經過指針調用函數:函數指針能夠調用它所指向的函數(前提就是該指針已經初始化或者是賦值給了一個函數)

fun("sleep", 8);

p2("sleep",8);//隱式解引用

(*p2)("sleep",8);//顯示解引用

函數指針形參:形參的兩種表示方法

bool function(const string&, int,bool(*) (const string&, int))或者是bool function(const string&, int,bool (const string&, int))

返回指向函數的指針:

int (*ff(int))(int *, int);//ff是一個函數名,形參是int,返回類型是函數指針。此函數指針是一個指向「返回類型爲int,參數表爲(int*,int)」的函數

等價於

typedef int (*PF)(int *, int);

PF ff(int);//容許將形參定義爲函數類型,可是返回類型不容許是函數類型,只能是指向函數的指針。相似的不能返回數組,只能返回數組元素的指針

指向重載函數的指針:指針的類型必須與重載函數的一個版本精確匹配。若是沒有,則對該指針的初始化和賦值都將致使編譯失敗。

 2.回調其實就是一種利用函數指針進行函數調用的過程。回調函數就是函數指針的一種用法?!

程序退出時的回調函數:當程序經過調用exit()或從main 中返回時, 回調函數中參數function 所指定的函數會先被調用, 而後才真正由exit()結束程序。_onexit與atexit,其定義以下:先進後出的原則&並關注被調用函數的類型。

atexit:https://msdn.microsoft.com/zh-cn/vstudio/tze57ck3 返回類型void 參數void

_onexit:https://msdn.microsoft.com/zh-cn/vstudio/zk17ww08.aspx返回類型int 參數void

STL中衆多算法和程序都用到回調:如不想在排序函數中嵌入排序邏輯,而讓使用者來實現相應的邏輯;或者,想讓庫可用於多種數據類型(int、float、string),此時就能夠使用函數指針,並進行回調。

回調函數用於實現通知機制。

3.《跟我一塊兒學C++》視頻教程第36課。回顧動態建立對象中就是用到了函數指針。實現了反射的機制,實現工廠模式。

 

 

下面兩篇是講解 指向類成員的函數指針的,以及基本的函數指針

http://www.cnblogs.com/AnnieKim/archive/2011/12/04/2275589.html

http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html

 

 

下面是一篇用函數指針和模版 來實現 簡單的委託的機制

http://xhrwang.me/2014/07/23/delegate-and-event-in-cpp.html

相關文章
相關標籤/搜索