基本用法:
# include <iostream>
# include <string>
using namespace std;
//第一种用法:函数对象(仿函数)在使用时可以向普通函数那样有返回值,形参等
class student
{
int operator()(int a,int b)
{
return a+b;
}
};
int main (void)
{
student stu;
cout<<stu(1,2)<<endl;
return 0;
}
//第二种用法:函数对象可以有自己的属性
class student
{
public:
student()
{
num=0;
}
void operator(string str)
{
cout<<str<<endl;
num++;
}
int num;
};
int main (void)
{
student stu;
stu("Hello C++");
stu("Hello C++");
stu("Hello C++");
cout<<stu.num<<endl;//可以记录函数被调用的次数
return 0;
}
//第三种用法:对象函数(仿函数)可以作为其他函数的形参
class student
{
public:
void operator()(string str)
{
cout<<str<<endl;
}
};
void f(student& stu,string str)
{
stu(str);
}
void g(student& stu)
{
f(stu,"Hello C++");
}
int main (void)
{
student stu;
g(stu);//调用完以后会输出Hello C++;其实转了一大圈还是转回来了
return 0;
}