一、函數對象
1、函數對象概念
概念:
-
重載函數調用操作符的類,其對象常稱為函數對象
-
函數對象使用重載的()時,行為類似函數調用,也叫仿函數
本質:
函數對象(仿函數)是一個類,不是一個函數
2、函數對象使用
特點:
-
函數對象在使用時,可以像普通函數那樣調用, 可以有參數,可以有返回值
-
函數對象超出普通函數的概念,函數對象可以有自己的狀態
-
函數對象可以作為參數傳遞
示例:
#include <string>?//1、函數對象在使用時,可以像普通函數那樣調用, 可以有參數,可以有返回值class MyAdd{public :int operator()(int v1,int v2){return v1 + v2;}};?void test01(){MyAdd myAdd;cout << myAdd(10, 10) << endl;}?//2、函數對象可以有自己的狀態class MyPrint{public:MyPrint(){count = 0;}void operator()(string test){cout << test << endl;count++; //統計使用次數}?int count; //內部自己的狀態};void test02(){MyPrint myPrint;myPrint("hello world");myPrint("hello world");myPrint("hello world");cout << "myPrint調用次數為: " << myPrint.count << endl;}?//3、函數對象可以作為參數傳遞void doPrint(MyPrint &mp , string test){mp(test);}?void test03(){MyPrint myPrint;doPrint(myPrint, "Hello C++");}?int main() {?//test01();//test02();test03();?system("pause");?return 0;}
總結:
-
仿函數寫法非常靈活,可以作為參數進行傳遞。