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