C++ 函数对象剖析
2011-07-02 13:09 x_feng 阅读(309) 评论(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
浙公网安备 33010602011771号