**自:
在c++程式語言中,有很多功能都與c語言相通,比如指標的應用等等。在這裡我們介紹的則是一種類似於函式指標的c++函式物件的相關介紹。c++函式物件不是函式指標。但是,在程式**中,它的呼叫方式與函式指標一樣,後面加個括號就可以了。這是入門級的隨筆,說的是函式物件的定義,使用,以及與函式指標,成員函式指標的關係。
c++函式物件實質上是乙個實現了operator()--括號操作符--的類。
下面是函式物件與函式指標的例子:
namespace};int addfunc(int a, int b) }
void test_addobj()
void test_addfunptr()
除了定義方式不一樣,使用方式可是一樣的。
既然c++函式物件與函式指標在使用方式上沒什麼區別,那為什麼要用函式物件呢?很簡單,函式物件可以攜帶附加資料,而指標就不行了。下面就舉個使用附加資料的例子:
class less另乙個例子:bool operator()(int value)
private:
int n;
};less isless(10);
cout << isless(9) << " " << isless(12); // 輸出 1 0
const int size = 5;要想讓乙個函式既能接受函式指標,也能接受函式物件,最方便的方法就是用模板。如:int array[size] = ;
// 找到小於陣列array中小於10的第乙個數的位置
int * pa = std::find_if(array, array + size, less(10));
// pa 指向 9 的位置
// 找到小於陣列array中小於40的第乙個數的位置
int * pb = std::find_if(array, array + size, less(40));
// pb 指向 30 的位置
templateint count_n(int* array, int size, func func)這個函式可以統計陣列中符合條件的資料個數,如:
const int size = 5;int array[size] = ;
cout << count_n(array, size, less(10)); // 2
// 用函式指標也沒有問題:
bool less10(int v)
cout << count_n(array, size, less10); // 2
c 函式指標和函式物件
三 函式指標 四 函式物件 博主認為,要想正確深入了解c 中的函式型別和函式指標,就應當首先了解在c 中成員函式在記憶體中的儲存方式。因此,本文會按照從基礎概念到實際應用,由表及裡的順序撰寫博主對函式指標和函式型別的理解。c 中的記憶體劃分為以下四個部分 1 全域性資料區 data area 2 區...
C 函式指標和函式物件
c 裡有函式指標和函式物件,讓我們來看下這2個的區別 我們在學習c c 時,有時會要寫乙個函式,這個函式的引數是另外乙個函式,一種寫法如下,include using namespace std void test void func int 引數是另外乙個函式 voidfn int data in...
C 函式指標和函式物件的總結
轉自 篇一 函式指標 函式指標 是指向函式的指標變數,在c編譯時,每乙個函式都有乙個入口位址,那麼這個指向這個函式的函式指標便指向這個位址。函式指標的用途是很大的,主要有兩個作用 用作呼叫函式和做函式的引數。函式指標的宣告方法 資料型別標誌符 指標變數名 形參列表 一般函式的宣告為 int func...