Surcharge de l'opérateur d'appel de fonction () en C ++

L'opérateur d'appel de fonction () peut être surchargé pour les objets de type classe. Lorsque vous surchargez (), vous ne créez pas une nouvelle façon d'appeler une fonction. Vous créez plutôt une fonction opérateur qui peut recevoir un nombre arbitraire de paramètres.

L'exemple suivant explique comment un opérateur d'appel de fonction () peut être surchargé.

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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