函數指針作參數的作用

函數指針作參數的作用查了很多資料,理解上有一定的難度,有的說作爲一個接口,我知道人家說得沒錯,但作爲初學者,當時怎麼也理解不了,現在我把我個人的理解作一個說明,忘高手指教,感謝中!
作爲一個接口,其實就是留個空間讓你填上相應的功能。比如,有兩個整數a和b,現在是a和b參與一個運算,具體什麼運算,由你自己決定,可以這樣寫一個程序:
先定義一個由函數指針作參數的函數:
     int fun(int(*pfun)(int,int),int a,int b)
     {
         //這裏是函數封裝的其它內容

         retrun pfun(a,b);
         //pfun是留給調用這個函數的空子(接口)
     }

然後再定義一個或幾個運算函數,怎麼運算就由自己決定,比如我用加法:
     int add(int a,int b)
     {
        return a+b;
     }
那麼在主程序中:
      main()
     {
        fun(add,1,2);
     }
這樣就實現了,一個函數接口的問題。當初看上面的程序好象有點複雜,與其那樣不如直接調用add多好,爲什麼要那樣啊?可是在稍複雜點的程序中,有好多內容不需要用戶去做,這些內容就可以封裝起來,有些內容只有在用戶使用這個封裝時才能決定的時候,比如上面兩個數的運算就競是什麼樣的,那要由用戶決定時,這個函數指針的作用就體現出來了!
以上本人初學只能體會這個樣子,不知道正確不?另外,高手們有更好的幫說明下,謝謝了!

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <iostream.h>
#include <list>
using namespace std;

void max(int a, int b)
{
    cout<<"now call max("<<a<<","<<b<<")..."<<endl;
    int t = a>b?a:b;
    cout<<t<<endl;
}
void min(int a, int b)
{
    cout<<"now call min("<<a<<","<<b<<")..."<<endl;
    int t = a<b?a:b;
    cout<<t<<endl;
}
typedef void (*myFun)(int a, int b); //定義一個函數指針用來引用max,min


//回調函數
void callback(myFun fun, int a, int b)
{
     fun(a,b);
}
void main()
{
    int i = 10;
    int j = 55;
     callback(max,i,j);

     callback(min,i,j);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章