Sobrecarga de operadores de entrada / salida en C ++

C ++ puede ingresar y generar los tipos de datos incorporados usando el operador de extracción de flujo >> y el operador de inserción de flujo <<. Los operadores de inserción y extracción de flujos también se pueden sobrecargar para realizar entradas y salidas para tipos definidos por el usuario, como un objeto.

Aquí, es importante hacer que la función de sobrecarga del operador sea un amigo de la clase porque se llamaría sin crear un objeto.

El siguiente ejemplo explica cómo el operador de extracción >> y el operador de inserción <<.

#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;
      }
      friend ostream &operator<<( ostream &output, const Distance &D ) { 
         output << "F : " << D.feet << " I : " << D.inches;
         return output;            
      }

      friend istream &operator>>( istream  &input, Distance &D ) { 
         input >> D.feet >> D.inches;
         return input;            
      }
};

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

   cout << "Enter the value of object : " << endl;
   cin >> D3;
   cout << "First Distance : " << D1 << endl;
   cout << "Second Distance :" << D2 << endl;
   cout << "Third Distance :" << D3 << endl;

   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

$./a.out
Enter the value of object :
70
10
First Distance : F : 11 I : 10
Second Distance :F : 5 I : 11
Third Distance :F : 70 I : 10