c++函數指針使用示例

來源:文萃谷 4.87K

設計一個名為estimate()的函數,估算編寫指定行數的代碼所需的時間,並且希望不同的程序員都可以使用該函數。以下是為大家分享的c++函數指針使用示例,供大家參考借鑑,歡迎瀏覽!

c++函數指針使用示例

  需求

假設要設計一個名為estimate()的函數,估算編寫指定行數的代碼所需的時間,並且希望不同的程序員都可以使用該函數。

對於所有的用户來説,estimate()中一部分代碼都是相同的,但該函數允許每個程序員提供自己的算法來估算時間。

為實現目標,採用的機制是,將程序員要使用的算法函數的地址傳遞給estimate()。

  實現代碼如下

複製代碼 代碼如下:

// : 定義控制枱應用程序的入口點。

//

#include "stdafx.h"

#includedouble betsy(int);

double pam(int);

//estimate函數的'第二個參數接受一個函數指針

void estimate(int lines,double (*pf)(int));

int _tmain(int argc, _TCHAR* argv[])

{

using namespace std;

int code;

cout<<"How many lines of code do you need?"<<endl;

cin>>code;

cout<<"Here's Betsy's estimate:"<<endl;

estimate(code,betsy);

cout<<"Here's Pam's estimate:"<<endl;

estimate(code,pam);

get);

get);

return 0;

}

inline double betsy(int lines){return 0.05*lines;}

inline double pam(int lines){return 0.03*lines+0.004*lines*lines;}

inline void estimate(int lines,double (*pf)(int))

{

using namespace std;

cout<<lines<<" lines will take "<<(*pf)(lines)<<"hour(s)"<<endl;

}

運行結果

  使用函數指針的好處

以上設計有助於今後的程序開發。當某個程序員為估算時間開發自己的算法時,他將不需要重新編寫estimate()函數。相反,他只需要提供自己的函數地址,並保證該函數的參數和返回類型正確即可。

函數指針使得程序員可以修改estimate()的行為,雖然他接觸不到estimate()的源代碼。

  內聯函數

由於函數實現的功能較簡單,所以可以使用內聯函數來代替常規函數。

要使用內聯函數(C++的新特性,用於提高程序運行速度),必須採取下述措施之一:

在函數聲明前加上關鍵字inline

在函數定義前加上關鍵字inline

內鏈函數的運行速度比常規函數稍快,但代價是需要佔用更多內存。如果程序在10個不同的地方調用了同一個內聯函數,則改程序將包含該函數代碼的10個副本,如下圖所示:

  什麼情況下應該考慮使用內聯函數?

函數代碼執行時間很短

如果使用C語言的宏執行了類似函數的功能,應考慮將他們轉換為C++內聯函數

注意:當函數過大或函數遞歸 了,則編譯器可能不會將其視為內聯函數對待。

熱門標籤