程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 如何使用C++函數對象?

如何使用C++函數對象?

編輯:C++入門知識

C++函數對象是通過一張虛函數表來實現的。簡稱為V-Table。在這個表中,主是要一個類的虛函數的地址表,這張表解決了繼承、重載的問題,保證其容真實反應實際的函數。

適合對屬於基本數據類型的對象排序,它使用<作為排序比較規則,第2種語法則是根據指定排序規則comp來進行排序,其中comp參數就是一個函數對象。如果要排序的對象不是如int,float等簡單類型或不想使用<作為排序規則的話就得使用第2種語法。

指定一個函數對象來作為排序規則函數對象)進行排序,那函數對象究竟是什麼了,其實簡單地說它就是一些使用起來像調用函數一樣的對象,如:一般的函數,函數指針,或重載了()運算符的類的實例等,使用這些對象的方式好像調用函數一樣所以稱這些對象為C++函數對象,如下就是函數對象定義:

  1.  void print(int x)  
  2.  
  3. {  
  4.  
  5.        if(x>=0&&x<=100) cout<<x<<” ”;  
  6.  
  7. }   
  8.  
  9.        //函數對象指針  
  10.  
  11. typedef void(*ptPrint)(int x);  
  12.  
  13. ptPrint prt=print;  
  14.  
  15. //一個重載了()運算符得類  
  16.  
  17. class isOk   
  18.  
  19. {  
  20.  
  21.   public:  
  22.  
  23.   bool operator () (int val)  
  24.  
  25.   {   
  26.  
  27.        if(val<0||val>100)  
  28.  
  29. {  
  30.  
  31.        return false;  
  32.  
  33. }  
  34.  
  35.   return true;  
  36.  
  37. }  
  38.  
  39. }; 

有了上面得定義後,我們就可以以函數調用的形式使用上面的函數對象了,如: for_each(vectorA.begin(),vectorA.end(),print)打印大於等於0小於等於100的數, transform(vectorA.begin(),vectorA.end(),vectorB.begin(),isOk())判斷向量vectorA中值x的范圍是否在0之100之間。

如果在則向量vectorB對應的值為真,否則為假,其中vectorB中的數據類型為bool。在實際中往往會根據調用函數對象時參數的多少將函數對象分為三種形式,,無參函數對象,一元函數對象和二元函數對象,剛才的C++函數對象就是一個無參函數對象。無參函數對象與一元,二元函數對象有很大的區別,一元,二元函數對象的定義需要繼承以下函數原型:

  1. class Grade  
  2.  
  3. {  
  4.  
  5. public:  
  6.  
  7.     Grade(int id,string name,int score)  
  8.  
  9.     {  
  10.  
  11.         ID=id;  
  12.  
  13.         Name=name;  
  14.  
  15.         Score=score;  
  16.  
  17.     }  
  18.  
  19.     int ID;  
  20.  
  21.     string Name;  
  22.  
  23.     int Score;  
  24.  
  25. }; 
  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

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