函数对象的概念
概念
1.重载函数调用操作符的类,其对象常称为函数对象
2.函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质
函数对象(仿函数)是一个类,不是一个函数
函数对象使用
特点
1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
2.函数对象超出普通函数的概念,函数可以有自己的状态
3.函数对象可以作为参数传递
代码示例
特点1:函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
void operator()(string str)
{
cout<< str <<endl;
}
};
class Myadd
{
public:
int operator()(int v1,int v2) //用引用报错??,为什么
{
return v1 + v2;
}
};
int main()
{
Test test;
test("HELLO WORLD");
Myadd myadd;
cout << myadd(1,3) <<endl;
return 0;
}
输出结果
特点2:函数对象超出普通函数的概念,函数可以有自己的状态
代码示例
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
Test()
{
this->count = 0;
}
void operator()(string str)
{
cout<< str <<endl;
count ++;
}
int count;
};
int main()
{
Test test;
test("HELLO WORLD");
test("HELLO WORLD");
test("HELLO WORLD");
test("HELLO WORLD");
test("HELLO WORLD");
cout << "test调用次数" <<test.count <<endl;
return 0;
}
输出结果
特点3:函数对象可以作为参数传递
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
Test()
{
this->count = 0;
}
void operator()(string str)
{
cout<< str <<endl;
count ++;
}
int count;
};
void print(Test& test,string str)
{
test(str);
}
int main()
{
Test test;
print(test,"hello");
print(test,"world");
print(test,"hello");
cout <<"调用次数"<< test.count<<endl;
return 0;
}
输出结果