小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C++函數(shù)對象與函數(shù)指針不同之處

 ONLY_影 2015-03-04
在C++編程語言中,有很多功能都與C語言相通,比如指針的應(yīng)用等等。在這里我們介紹的則是一種類似于函數(shù)指針的C++函數(shù)對象的相關(guān)介紹。C++函數(shù)對象不是函數(shù)指針。但是,在程序代碼中,它的調(diào)用方式與函數(shù)指針一樣,后面加個括號就可以了。這是入門級的隨筆,說的是函數(shù)對象的定義,使用,以及與函數(shù)指針,成員函數(shù)指針的關(guān)系。
C++函數(shù)對象實質(zhì)上是一個實現(xiàn)了operator()--括號操作符--的類。
下面是函數(shù)對象與函數(shù)指針的例子:
  1. namespace  
  2. {  
  3.     class AddCls  
  4.     {    
  5.     public:    
  6.         int operator()(int a, int b)    
  7.         {    
  8.             return a + b;    
  9.         }    
  10.     };  
  11.   
  12.     int AddFunc(int a, int b)    
  13.     {    
  14.         return a + b;    
  15.     }  
  16. }  
  17.   
  18. void test_addObj()  
  19. {  
  20.     // 定義函數(shù)對象  
  21.     AddCls addObj;   
  22.     PRINT_DEBUG(addObj(3, 4);  
  23. }  
  24.   
  25. void test_addFunPtr()  
  26. {  
  27.     typedef int (*FunPtr) (int a, int b);    
  28.     FunPtr addFunPtr = &AddFunc;  
  29.     PRINT_DEBUG(addFunPtr(3, 5));  
  30. }  
除了定義方式不一樣,使用方式可是一樣的。
既然C++函數(shù)對象與函數(shù)指針在使用方式上沒什么區(qū)別,那為什么要用函數(shù)對象呢?很簡單,函數(shù)對象可以攜帶附加數(shù)據(jù),而指針就不行了。下面就舉個使用附加數(shù)據(jù)的例子:
  1. class less    
  2. {    
  3. public:    
  4.     less(int num):n(num){}    
  5.     bool operator()(int value)    
  6.     {   
  7.         return value < n;    
  8.     }    
  9. private:    
  10.     int n;    
  11. };  
  12. less isLess(10);  
  13. cout << isLess(9) << " " << isLess(12); // 輸出 1 0   
另一個例子:
  1. const int SIZE = 5;    
  2. int array[SIZE] = { 50, 30, 9, 7, 20};    
  3. // 找到小于數(shù)組array中小于10的第一個數(shù)的位置    
  4. int * pa = std::find_if(array, array + SIZE, less(10));  
  5. // pa 指向 9 的位置    
  6. // 找到小于數(shù)組array中小于40的第一個數(shù)的位置    
  7. int * pb = std::find_if(array, array + SIZE, less(40));   
  8. // pb 指向 30 的位置  
要想讓一個函數(shù)既能接受函數(shù)指針,也能接受函數(shù)對象,最方便的方法就是用模板。如:
  1. template<typename FUNC>  
  2. int count_n(int* array, int size, FUNC func)    
  3. {    
  4.   int count = 0;    
  5.   for(int i = 0; i < size; ++i)    
  6.   if(func(array[i]))    
  7.     count ++;    
  8.   return count;    
  9. }  
這個函數(shù)可以統(tǒng)計數(shù)組中符合條件的數(shù)據(jù)個數(shù),如:
  1. const int SIZE = 5;    
  2. int array[SIZE] = { 50, 30, 9, 7, 20};    
  3. cout << count_n(array, SIZE, less(10)); // 2    
  4. // 用函數(shù)指針也沒有問題:    
  5. bool less10(int v)    
  6. {    
  7.   return v < 10;    
  8. }    
  9. cout << count_n(array, SIZE, less10); // 2   

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多