函数对象
概念:
重载函数调用操作符的类,其对象常称为函数对象。
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个类,不是一个函数
函数对象使用
1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
2.函数对象超出普通函数的概念,函数对象可以有自己的状态
3.函数对象可以作为参数传递
1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
class Myadd{
public:
int operator()(int v1,int v2){
return v1+v2;
}
}
void test(){
Myadd myadd;
cout<<myadd(10,20)<<endl;
}
//2.函数对象超出普通函数的概念,函数对象可以有自己的状态
class MyPrint{
public:
MyPrint(){
this->count=0;
}
void operator()(string text){
cout<<text<<endl;
this->count++;
}
int count;
}
void test(){
MyPrint myprint;
myprint("hello");
myprint("hello");
myprint("hello");
cout<<"次数"<<myprint.count<<endl;
}
//3.函数对象可以作为参数传递
class MyPrint{
public:
MyPrint(){
this->count=0;
}
void operator()(string text){
cout<<text<<endl;
this->count++;
}
int count;
}
void doPrint(MyPrint &mp,string text){
mp(text);
}
void test(){
MyPrint myprint;
doPrint(myprint,"hellp");
}
谓词
返回bool类型的仿函数称为谓词
如果operator()接受一个参数,那么叫做一元谓词
如果operator()接受两个参数,那么叫做二元谓词