概念:
重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:函数对象(仿函数)是一个类,不是一个函数
函数对象使用:
函数对象在使用时,可以像普通函数那样调用,可以有参数,有返回值
函数对象超出普通函数的概念,函数对象有自己的状态
函数对象可以作为参数传递
例子:
#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;
}
运行结果: