一个有意思的c++操作符重载

330 阅读1分钟

一个有意思的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);