代码改变世界

C++ 函数对象剖析

2011-07-02 13:09  x_feng  阅读(304)  评论(0编辑  收藏  举报

1,什么是函数对象

函数对象实质是一个实现了operator()括号操作符的类。

2,先来看看operator()

如果一个类类型被定义来表示一个操作时,则可以为这个类类型重载函数调用操作符,以方便调用这个操作。

#include <iostream>
using namespace std;

class absInt
{
public:
	int operator()(int val)
	{
		return val < 0 ? -val:val;
	}
};
void main()
{
	absInt a;
	cout<<a(-2)<<endl;
	system("pause");
}

重载的operator()必须被声明为成员函数,它的参数表可以有任意数目的参数,但operator()必须这样写,表示运算符重载

3,定义和使用函数对象

class less
{
public:
	less(int num):n(num){};
	bool operator()(int value)
	{
		return value < n;
	}
private:
	int n;
};
void main()
{
	//absInt a;//定义函数对象
	//cout<<a(-2)<<endl;//使用
	int arr[5] = {50, 30, 9, 7, 20};
	int *p = find_if(arr, arr + 5, less(10));
	cout<<*p<<endl;
	system("pause");
}

上面的p指向9,less(10)表示取第一个小于10的数。可以把附加数据保存在函数对象中,这是函数对象的优势所在。它使用起来像函数指针,但是不是真正的函数指针。

这里只是简单介绍一下,详细的可以看一下几篇博文,写的很详细。

http://www.cnblogs.com/ly4cn/archive/2007/07/21/826885.html

http://www.cnblogs.com/lvpengms/archive/2011/02/21/1960078.html

http://www.cnblogs.com/lichkingct/archive/2009/08/04/1538045.html