c++函數(shù)指針使用示例分享
需求
假設要設計一個名為estimate()的函數(shù),估算編寫指定行數(shù)的代碼所需的時間,并且希望不同的程序員都可以使用該函數(shù)。
對于所有的用戶來說,estimate()中一部分代碼都是相同的,但該函數(shù)允許每個程序員提供自己的算法來估算時間。
為實現(xiàn)目標,采用的機制是,將程序員要使用的算法函數(shù)的地址傳遞給estimate()。
實現(xiàn)代碼如下
// funpointer.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>double betsy(int);
double pam(int);
//estimate函數(shù)的第二個參數(shù)接受一個函數(shù)指針
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;
}
運行結果
使用函數(shù)指針的好處
以上設計有助于今后的程序開發(fā)。當某個程序員為估算時間開發(fā)自己的算法時,他將不需要重新編寫estimate()函數(shù)。相反,他只需要提供自己的函數(shù)地址,并保證該函數(shù)的參數(shù)和返回類型正確即可。
函數(shù)指針使得程序員可以修改estimate()的行為,雖然他接觸不到estimate()的源代碼。
內聯(lián)函數(shù)
由于函數(shù)實現(xiàn)的功能較簡單,所以可以使用內聯(lián)函數(shù)來代替常規(guī)函數(shù)。
要使用內聯(lián)函數(shù)(C++的新特性,用于提高程序運行速度),必須采取下述措施之一:
在函數(shù)聲明前加上關鍵字inline
在函數(shù)定義前加上關鍵字inline
內鏈函數(shù)的運行速度比常規(guī)函數(shù)稍快,但代價是需要占用更多內存。如果程序在10個不同的地方調用了同一個內聯(lián)函數(shù),則改程序將包含該函數(shù)代碼的10個副本,如下圖所示:
什么情況下應該考慮使用內聯(lián)函數(shù)?
函數(shù)代碼執(zhí)行時間很短
如果使用C語言的宏執(zhí)行了類似函數(shù)的功能,應考慮將他們轉換為C++內聯(lián)函數(shù)
注意:當函數(shù)過大或函數(shù)遞歸 了,則編譯器可能不會將其視為內聯(lián)函數(shù)對待。
您可能感興趣的文章
- 04-02c語言函數(shù)調用后清空內存 c語言調用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05織夢dedecms什么時候用欄目交叉功能?