c++函數指標使用樣本分享_C 語言

來源:互聯網
上載者:User

需求
假設要設計一個名為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++內嵌函式
 注意:當函數過大或函數遞迴 了,則編譯器可能不會將其視為內嵌函式對待。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.