Menú principal

martes, 8 de septiembre de 2020

Multiplicación de fracciones Parte 3 - Sobrecarga de operadores (operator<<) - C++

Una vez visto la sobrecarga del operador * en la parte 2, procedemos a hacer la sobrecarga del operador de salida,  operator<<. Este operador se declara siempre como ostream& operator<< (ostream &out, parámetros de entrada). Al realizar esta sobrecarga, podremos establecer como queremos que se muestre la fracción, por ejemplo, en la linea 37 establecemos que si el numerador y el denominador es negativo o si solo el denominador es negativo, multiplique a toda la fracción por menos uno para su mejor visualización. Una vez que hemos puesto todas las premisas que queramos en dicho operador siempre deberá devolver out, es decir, return out;. Como se puede apreciar en la linea 68 ahora podremos visualizar de una forma muy cómoda en el main las fracciones poniendo simplemente su nombre. 

 1 //Visualizacion con sobrecarga de operador
 2  #include <iostream>
 3  using namespace std;
 4  
 5  class Fraccion
 6  {
 7      int n,d;
 8  
 9  public:
10      Fraccion(int num=0, int den=1)
11      {
12          n=num;
13          d=den;
14      }
15      //Set para introducir los datos de las fracciones
16      void SetN(int num)
17      {
18          n=num;
19      }
20      void SetD(int den)
21      {
22          d=den;
23      }
24      //Friend para que la funcion pueda acceder a la clase
25      friend Fraccion operator* (Fraccion f1, Fraccion f2);
26      friend ostream& operator<< (ostream &out, Fraccion f);
27  };
28  
29  Fraccion operator* (Fraccion f1, Fraccion f2)
30  {
31      Fraccion fm(f1.n*f2.n , f1.d*f2.d);
32      return fm;
33  }
34  
35  ostream& operator<< (ostream &out, Fraccion f)
36  {
37      if((f.n<0&&f.d<0) || f.d<0)
38      {
39          f.n=f.n*(-1);
40          f.d=f.d*(-1);
41          out << f.n << "/" << f.d;
42      }
43  
44      else if(f.n==f.d)
45          out << "1";
46      else
47          out << f.n << "/" << f.d ;
48  
49      return out;
50  }
51  int main()
52  {
53      Fraccion f1, f2, fMulti;
54      int n1,n2,d1,d2;
55  
56      cout << "Intro primer numerador: "; cin >>n1;
57      cout << "Intro primer denominador: "; cin >>d1;
58      cout << endl << "Intro segundo numerador: "; cin >>n2;
59      cout << "Intro segundo denominador: "; cin >>d2;
60  
61      f1.SetN(n1);
62      f1.SetD(d1);
63      f2.SetN(n2);
64      f2.SetD(d2);
65  
66      fMulti=f1*f2;
67  
68      cout<<endl<<"La multiplicacion de "<<f1<<" * "<<f2<<" = "<<fMulti<<endl;
69  }

No hay comentarios:

Publicar un comentario