概念

重载函数调用操作符的类,其对象常称为函数对象
函数对象使用重载的()时,行为类似函数调用,也叫仿函数

本质:函数对象(仿函数)是一个类,不是一个函数

函数对象使用

函数对象在使用时,可以像普通函数那样调用,可以有参数,有返回值
函数对象超出普通函数的概念,函数对象有自己的状态
函数对象可以作为参数传递

例子:

#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;
}

运行结果:
STL-函数对象_#include
STL-函数对象_c++_02
STL-函数对象_函数对象_03