重载了函数调用符()的类,其创建的对象我们称为函数对象:
class Myfun
{
public:
int operator()(int a , int b)
{
return a+b;
}
};
int main()
{
Myfun obj;//重载了函数调用符的类,其对象称为函数对象。
}
而且函数对象使用 重载的()时,行为类似于调用函数,叫仿函数
Myfun obj;//创建函数对象
cout << obj(1,100); //使用仿函数,也就是使用该类重载的()
//输出结果为 101
与普通函数不同的是,仿函数可以拥有自己的状态;
因为仿函数本质是一个对象,对象通过类创建,类拥有自己的成员属性。借此可以表示该函数的状态。实例如下:
class Person{
public:
int operator()(string name)
{
cout << name << endl;
this->cout++;//成员属性,用来计算调用次数
}
int cout; //普通函数没有这个属性,而因为仿函数本质为对象,所以可以借此表示状态
};
int main()
{
Person p;
p("hzh");
p("ljj");
p("yr");
cout << p.cout << endl;//调用了三次仿函数,所以输出结果为3
}