函数对象
概念:
重载函数调用操作符的类 其对象常称为函数对象
函数对象使用重载的()时 行为类似函数调用 也叫仿函数
本质:
函数对象(仿函数)是一个类 不是一个函数
函数对象使用特点:
函数对象在使用时 可以像普通函数那样调用 可以有参数和返回值
函数对象超出了普通函数的概念 函数对象可以有自己的状态
函数对象可以作为参数传递
#include <iostream>
using namespace std;
//函数对象在使用时 可以像普通函数那样调用 可以有参数和返回值
class MyAdd{
public:
int operator()(int v1, int v2){
return v1 + v2;
}
};
void test01(){
MyAdd ad;
cout << ad(10,10) << endl;
}
//函数对象超出了普通函数的概念 函数对象可以有自己的状态
class MyPrint{
public:
MyPrint(){
this->count = 0;
}
void operator()(string test){
cout << test << endl;
this->count++;
}
int count; //内部自己的状态
};
void test02(){
MyPrint mp;
mp("hello world");
mp("c++");
//因为mp是一个类 所以可以通过count来记录自身的状态
//而普通函数不是一个类 必须通过静态成员或者全局变量来实现
cout << "MyPrint函数调用的次数为:" << mp.count << endl;
}
//函数对象可以作为参数传递
void doPrint(MyPrint &mp, string test){
mp(test);
}
void test03(){
MyPrint mp;
doPrint(mp, "hello");
}
int main() {
test01();
test02();
test03();
return 0;
}