程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++函數指針應用示例分享

c++函數指針應用示例分享

編輯:關於C++

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++內聯函數
 留意:當函數過年夜或函數遞歸 了,則編譯器能夠不會將其視為內聯函數看待。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved