Ооо, все-таки не С++ :l_rotate: 
10 лет как-раз прошло со времени принятия стандарта.
Функтор это обьект, выступающий в роли функции (одна из идиом STL),
например
class Printer
{
public:
  void operator()(int i)
  {
    std::cout << i << std::endl;
  }
}
void main()
{
  Printer print;
  print(1);
}
Сам по себе пример не очень выразителен, но вкупе со стандартной библиотекой положение меняется
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
class Summa
{
	T summa;
public:
	Summa(const T& initialValue) : summa(initialValue) {}
	Summa(const Summa<T>& other) : summa(other.summa) {}
	void operator()(const T& value) { summa += value; }
	operator const T() { return summa; }
};
template <class T>
class Average
{
	long elems;
	Summa<T> summa;
public:
	Average() : elems(0), summa(0) {}
	void operator()(const T& value)
	{
		elems++;
		summa(value);
	}
	operator const T() { return  static_cast<T>(summa / static_cast<double>(elems)); }
};
void main()
{
	vector<int> values;
	for(int i = 0; i < 10; i++)
	{
		values.push_back(rand());
	}
	cout << "Values: ";
	copy(values.begin(), values.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	cout << "Summa = ";
	cout << for_each(values.begin(), values.end(), Summa<int>(0));
	cout << endl;
	cout << "Average = ";
	cout << for_each(values.begin(), values.end(), Average<int>());
	cout << endl;
}
 Если интересно - читай