Operador de chamada de função () Sobrecarga em C ++

O operador de chamada de função () pode ser sobrecarregado para objetos do tipo de classe. Quando você sobrecarrega (), não está criando uma nova maneira de chamar uma função. Em vez disso, você está criando uma função de operador que pode receber um número arbitrário de parâmetros.

O exemplo a seguir explica como um operador de chamada de função () pode ser sobrecarregado.

#include <iostream>
using namespace std;
 
class Distance {
   private:
      int feet;             // 0 to infinite
      int inches;           // 0 to 12
      
   public:
      // required constructors
      Distance() {
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i) {
         feet = f;
         inches = i;
      }
      
      // overload function call
      Distance operator()(int a, int b, int c) {
         Distance D;
         
         // just put random calculation
         D.feet = a + c + 10;
         D.inches = b + c + 100 ;
         return D;
      }
      
      // method to display distance
      void displayDistance() {
         cout << "F: " << feet << " I:" << inches << endl;
      }   
};

int main() {
   Distance D1(11, 10), D2;

   cout << "First Distance : "; 
   D1.displayDistance();

   D2 = D1(10, 10, 10); // invoke operator()
   cout << "Second Distance :"; 
   D2.displayDistance();

   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

First Distance : F: 11 I:10
Second Distance :F: 30 I:120