本文中的一些重要概念摘自C语言中文网
链接:http://c.biancheng.net/view/354.html

什么是函数对象呢?
当一个类对()运算符进行了重载,使它成为了自己的成员函数,那么这个类就叫做函数对象类,通过这个类创建出来的对象就叫做函数对象。而这样的对象使用起来的时候调用这个重载函数时像极了函数调用,所以称这样的对象叫函数对象。

以下是本人测试函数对象的一个例子,这个例子实现了计算三个数的平方和:
#include<iostream>

using namespace std;

class Function_object
{
public:
double operator()(double a, double b, double c){
return a*a + b*b + c*c;
}
};

int main()
{
Function_object square_sum;
cout << square_sum(1, 2, 3) << endl;
return 0;
}

运行结果:14

重载()运算符的时候对函数的参数类型,个数是没有限制的,可以自由定义。那么函数对象相较于普通函数又有什么优点呢?为什么C++语言需要定义这么一个机制呢?
我们知道,函数指针,函数名,可以当做一个参数来使用,而函数对象的属性跟他们一样,也可以作为函数的参数,而且还可以在函数对象类中定义自己的一些数据成员,来标识不同的属性,或者操作,并在创建对象的时候就初始化这些属性,使得使用函数对象的时候可以执行不同性质的操作。因此函数对象相较于普通函数而言,功能是更加强大的。