国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

c++函數(shù)指針使用示例分享

2020-01-26 15:34:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

需求
假設(shè)要設(shè)計(jì)一個(gè)名為estimate()的函數(shù),估算編寫(xiě)指定行數(shù)的代碼所需的時(shí)間,并且希望不同的程序員都可以使用該函數(shù)。

對(duì)于所有的用戶來(lái)說(shuō),estimate()中一部分代碼都是相同的,但該函數(shù)允許每個(gè)程序員提供自己的算法來(lái)估算時(shí)間。

為實(shí)現(xiàn)目標(biāo),采用的機(jī)制是,將程序員要使用的算法函數(shù)的地址傳遞給estimate()。

實(shí)現(xiàn)代碼如下

復(fù)制代碼 代碼如下:

// funpointer.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include "stdafx.h"
#include <iostream>double betsy(int);
double pam(int);

//estimate函數(shù)的第二個(gè)參數(shù)接受一個(gè)函數(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;
}

運(yùn)行結(jié)果

使用函數(shù)指針的好處
以上設(shè)計(jì)有助于今后的程序開(kāi)發(fā)。當(dāng)某個(gè)程序員為估算時(shí)間開(kāi)發(fā)自己的算法時(shí),他將不需要重新編寫(xiě)estimate()函數(shù)。相反,他只需要提供自己的函數(shù)地址,并保證該函數(shù)的參數(shù)和返回類型正確即可。

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

內(nèi)聯(lián)函數(shù)
由于函數(shù)實(shí)現(xiàn)的功能較簡(jiǎn)單,所以可以使用內(nèi)聯(lián)函數(shù)來(lái)代替常規(guī)函數(shù)。

要使用內(nèi)聯(lián)函數(shù)(C++的新特性,用于提高程序運(yùn)行速度),必須采取下述措施之一:

在函數(shù)聲明前加上關(guān)鍵字inline
在函數(shù)定義前加上關(guān)鍵字inline
內(nèi)鏈函數(shù)的運(yùn)行速度比常規(guī)函數(shù)稍快,但代價(jià)是需要占用更多內(nèi)存。如果程序在10個(gè)不同的地方調(diào)用了同一個(gè)內(nèi)聯(lián)函數(shù),則改程序?qū)摵瘮?shù)代碼的10個(gè)副本,如下圖所示:

什么情況下應(yīng)該考慮使用內(nèi)聯(lián)函數(shù)?
 函數(shù)代碼執(zhí)行時(shí)間很短
如果使用C語(yǔ)言的宏執(zhí)行了類似函數(shù)的功能,應(yīng)考慮將他們轉(zhuǎn)換為C++內(nèi)聯(lián)函數(shù)
 注意:當(dāng)函數(shù)過(guò)大或函數(shù)遞歸 了,則編譯器可能不會(huì)將其視為內(nèi)聯(lián)函數(shù)對(duì)待。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广水市| 咸阳市| 海晏县| 山东省| 淮滨县| 乌兰察布市| 榆中县| 遂昌县| 镇平县| 杭锦后旗| 中宁县| 聊城市| 凌云县| 徐闻县| 石林| 芒康县| 防城港市| 芜湖市| 都兰县| 巴楚县| 金门县| 黄骅市| 尼玛县| 阿拉善左旗| SHOW| 铁岭市| 商河县| 揭西县| 宜宾市| 报价| 玉屏| 萨嘎县| 禹州市| 武宁县| 太仓市| 洛隆县| 台州市| 抚宁县| 监利县| 赤城县| 定州市|