函式指標和函式物件

2021-04-12 20:48:18 字數 2024 閱讀 3207

函式指標分為全域性函式指標和類成員函式指標.

函式指標型別為全域性函式.

#include "stdafx.h"

using namespace std;

class testaction;

typedef void (*fp)(int);

void drink(int i)

void eat(int i)

class testaction

}; int main(int argc, char* argv)

#include "stdafx.h"

using namespace std;

class action;

class testaction;

// 函式指標型別為類action 的成員函式

typedef void (action::*fp)(int);

class action

void eat(int i)

}; class testaction

}; int main(int argc, char* argv)

#include "stdafx.h"

using namespace std;

class action;

class drink;

class eat;

class testaction;

class action

virtual void act(int i) = 0;

}; class drink : public action

}; class eat : public action

}; class testaction

}; int main(int argc, char* argv)

#include "stdafx.h"

using namespace std;

class negate

}; void callback(int n, const negate& neg) // 傳遞乙個函式物件

int main(int argc, char* argv)

stl 庫中定義了很多函式物件以供相關演算法呼叫,如 模板化的函式物件greater<> 或者less<>:

vector vi;

//.. 填充向量

sort(vi.begin(), vi.end(), greater() );// 降序(descending)

sort(vi.begin(), vi.end(), less() ); // 公升序(ascending)

雖然傳遞函式指標被廣泛應用於事件驅動系統中,以此實現**函式通過指標來呼叫。但c++ 還是提供了另外一種可供選擇的辦法,即函式物件,利用它可以避免使用函式指標。這樣做有幾個優點。首先,因為物件可以在內部修改而不用改動外部介面,因此設計更靈活,更富有彈性。函式物件也具備有儲存先前呼叫結果的資料成員。此外,編譯器可以內聯函式物件,從而進一步增強效能。函式物件可以具體表達依賴成員模板的通用演算法, 這些演算法借助普通的函式指標難以完成。例用函式物件實現了乙個通用的negation 演算法操作:

函式物件(function object)

函式指標型別為類成員函式.

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

函式物件 和 函式指標 的區別

參考一 函式物件 也稱 算符 是過載了 操作符的普通類物件。因此從語法上講,函式物件與普通的函式行為類似。用函式物件代替函式指標有幾個優點 1.首先,因為物件可以在內部修改而不用改動外部介面,因此設計更靈活,更富有彈性。函式物件也具備有儲存先前呼叫結果的資料成員。在使用普通函式時需要將先前呼叫的結果...