c++函數指針應用示例分享。本站提示廣大學習愛好者:(c++函數指針應用示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是c++函數指針應用示例分享正文
需求
假定要設計一個名為estimate()的函數,預算編寫指定行數的代碼所需的時光,而且願望分歧的法式員都可使用該函數。
關於一切的用戶來講,estimate()中一部門代碼都是雷同的,但該函數許可每一個法式員供給本身的算法來預算時光。
為完成目的,采取的機制是,將法式員要應用的算法函數的地址傳遞給estimate()。
完成代碼以下
// funpointer.cpp : 界說掌握台運用法式的進口點。
//
#include "stdafx.h"
#include <iostream>double 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);
getchar();
getchar();
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++內聯函數
留意:當函數過年夜或函數遞歸 了,則編譯器能夠不會將其視為內聯函數看待。