C++仿函数
概念
仿函数是一个类,不是一个函数
重载函数操作符的类,其对象也称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数函数对象使用
1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值//定义一个相加的仿函数
class funadd {
public:
int operator()(int a,int b){ //参数a b
return a + b; //返回值
}
};
void test18() {
funadd add; //函数对象
cout << add(10, 20) << endl; //像普通函数那样调用
}
输出的结果为30
2.函数对象超出普通函数的概念,函数对象可以有自己的状态
class funprint{
public:
funprint() {
this->count = 0;
}
void operator()(string str){
cout << str << endl;
count++;
}
int count; //定义一个状态,统计函数调用了多少次
};
void test18() {
funprint prt;
prt("hello");
prt("hello");
prt("hello");
cout << "调用了" << prt.count << "次" << endl;
}
输出结果
3.函数对象可以作为参数
//仿函数
class funprint{
public:
void operator()(string str){
cout << str << endl;
}
};
void test18(funprint &fpt,string str) {
fpt(str); //使用函数对象
}
int main()
{
funprint fpt;
test18(fpt, "hello"); //将函数对象fpt做参数传递
输出结果为30