一个有意思的c++操作符重载
// C++ program to demonstrate working of
// functors.
#include <bits/stdc++.h>
using namespace std;
// A Functor
class increment
{
private:
int num;
public:
increment(int n) : num(n) { }
// This operator overloading enables calling
// operator function () on objects of increment
int operator () (int arr_num) const {
return num + arr_num;
}
};
// Driver code
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr)/sizeof(arr[0]);
int to_add = 5;
transform(arr, arr+n, arr, increment(to_add));
for (int i=0; i<n; i++)
cout << arr[i] << " ";
}
transform接收的第四个参数利用了操作符重载,本来应当传入一个一元函数或一元函数指针,但是现在用一个对象以及操作符“()”重载实现了类似函数的效果。
这一行
transform(arr, arr+n, arr, increment(to_add));
与下面的两行的作用一样
// Creating object of increment
increment obj(to_add);
// Calling () on object
transform(arr, arr+n, arr, obj);