概念:
重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:函数对象(仿函数)是一个类,不是一个函数
函数对象使用:
函数对象在使用时,可以像普通函数那样调用,可以有参数,有返回值
函数对象超出普通函数的概念,函数对象有自己的状态
函数对象可以作为参数传递
例子:
#include <iostream> using namespace std; #include <string> class MyAdd { public: int operator()(int v1,int v2) { return v1+v2; } }; //1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值 void test() { MyAdd myAdd; cout<<myAdd(1,2)<<endl; //可以返回值 } //2.函数对象超出普通函数的概念,函数对象可以有自己的状态 class Printstr { public: Printstr() { this->count = 0; } void operator()(string thing) { cout<<thing<<endl; count++; //可以有自己的状态统计 } int count; }; void test02() { Printstr p; p("hello 2020"); p("hello 2020"); p("hello 2020"); cout<<"调用次数:"<<p.count<<endl; //输出状态 } //3.函数对象可以作为参数传递 void doprint(Printstr &p,string thing) //可以做参数传递 { p(thing); } void test03() { Printstr p; doprint(p,"hello 2020"); } int main() { //test(); //test02(); test03(); system("pause"); return 0; }
运行结果: