C 的函式物件優於函式指標地方

2022-02-16 10:15:00 字數 1368 閱讀 9085

**自:    

在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...