Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sobrecarga de operandos

Estas en el tema de Sobrecarga de operandos en el foro de C/C++ en Foros del Web. Buenas, Debo hacer un proyecto para la universidad. Tengo que crear varias clases, una de ellas es una clase tipo FECHA, y a la hora ...
  #1 (permalink)  
Antiguo 07/03/2014, 12:54
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 0
Sobrecarga de operandos

Buenas,

Debo hacer un proyecto para la universidad.

Tengo que crear varias clases, una de ellas es una clase tipo FECHA, y a la hora de sobrecargar los operandos me encuentro ante la duda de si sobrecargarlos externa o internamente.

Por ejemplo, tengo que sobrecargar los operandos de comparación (<,>,<=,>=,== y !=). He comprobado que no hay diferencia entre sobrecargarlos externa o internamente, pero estos operadores deben devolver un valor bool diferente al tipo-clase, entonces ¿debo sobrecargarlos externamente?

Luego, por otro lado tengo operadores ++, -- (postfijos y prefijos), += y -= que devuelven una referencia a FECHA. Estos operadores los tengo sobrecargados internamente pero nose si podría sobrecargarlos externamente.

Y por último, tengo los operadores + y - (2 versiones de cada uno, una versión con primer parámetro FECHA y segundo INT, y otra versión con los parámetros en orden inverso) sobrecargados externamente devolviendo una FECHA pero no se si podría sobrecargarlos internamente.

Espero que alguien me pueda resolver las dudas

Un saludo, Jose
  #2 (permalink)  
Antiguo 07/03/2014, 20:43
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Sobrecarga de operandos

Jose, en la mayoría de los foros, no solo este.Una de las normas es no solucionarte el haciendolo nosotros el problema por ti.
Se ve que ya has estado buscando y eso es genial.
Posta lo que tengas echo y entonces obtendrás respuestas por un tubo.
Saludos, espero que logres lo que te hace falta ;)
  #3 (permalink)  
Antiguo 08/03/2014, 13:36
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Sobrecarga de operandos

Esta es la clase que definí (su cabecera) y como se puede ver puedo sobrecargarlos interna y externamente

Código C++:
Ver original
  1. #ifndef _FECHA_H_
  2. #define _FECHA_H_
  3. #include <iostream>
  4.  
  5. class Fecha {
  6.  public:
  7.   Fecha (const int dia = 0, const int mes = 0, const int anno = 0);
  8.   Fecha (const Fecha& );
  9.   Fecha (const char* );
  10.   class Invalida {
  11.   public:
  12.     Invalida(const char* texto) { razon_ = texto; }
  13.     const char* por_que() { return razon_; }
  14.   private:
  15.     const char* razon_;
  16.   };
  17.   int anno() const { return anno_; }
  18.   int mes() const { return mes_; }
  19.   int dia() const { return dia_; }
  20.  
  21.   //OPERADORES ARITMETICOS
  22.   Fecha operator++ (const int); // Operador postfijo
  23.   Fecha operator-- (const int); // Operador postfijo
  24.   Fecha& operator++ ();
  25.   Fecha& operator-- ();
  26.   Fecha& operator+= (const int);
  27.   Fecha& operator-= (const int);
  28.   Fecha operator= (const Fecha&);
  29.   /*   //OPERADORES DE COMPARACION
  30.   bool operator == (const Fecha&);
  31.   bool operator != (const Fecha&);
  32.   bool operator < (const Fecha&);
  33.   bool operator <= (const Fecha&);
  34.   bool operator > (const Fecha&);
  35.   bool operator >= (const Fecha&);*/
  36.  
  37.   char* cadena() const;
  38.  private:
  39.   int dia_, mes_, anno_;
  40.   static const int AnnoMinimo = 1600;
  41.   static const int AnnoMaximo = 2200;
  42.   bool Bisiesto() const;
  43.   bool FechaValida() const throw(Fecha::Invalida);
  44. };
  45.  
  46. std::ostream& operator << (std::ostream &o, const Fecha &a);
  47.  
  48. Fecha operator + (const int, const Fecha&);
  49. Fecha operator + (const Fecha&, const int);
  50. Fecha operator - (const int, const Fecha&);
  51. Fecha operator - (const Fecha&, const int);
  52.   //OPERADORES DE COMPARACION
  53. bool operator == (const Fecha&, const Fecha&);
  54. bool operator != (const Fecha&, const Fecha&);
  55. bool operator < (const  Fecha&, const Fecha&);
  56. bool operator <= (const  Fecha&, const Fecha&);
  57. bool operator > (const  Fecha&, const Fecha&);
  58. bool operator >= (const  Fecha&, const Fecha&);
  59. #endif
  #4 (permalink)  
Antiguo 09/03/2014, 09:05
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Sobrecarga de operandos

Cita:
Iniciado por DvNe Ver Mensaje
Buenas,

Debo hacer un proyecto para la universidad.

Tengo que crear varias clases, una de ellas es una clase tipo FECHA, y a la hora de sobrecargar los operandos me encuentro ante la duda de si sobrecargarlos externa o internamente.

Por ejemplo, tengo que sobrecargar los operandos de comparación (<,>,<=,>=,== y !=). He comprobado que no hay diferencia entre sobrecargarlos externa o internamente, pero estos operadores deben devolver un valor bool diferente al tipo-clase, entonces ¿debo sobrecargarlos externamente?

Luego, por otro lado tengo operadores ++, -- (postfijos y prefijos), += y -= que devuelven una referencia a FECHA. Estos operadores los tengo sobrecargados internamente pero nose si podría sobrecargarlos externamente.

Y por último, tengo los operadores + y - (2 versiones de cada uno, una versión con primer parámetro FECHA y segundo INT, y otra versión con los parámetros en orden inverso) sobrecargados externamente devolviendo una FECHA pero no se si podría sobrecargarlos internamente.

Espero que alguien me pueda resolver las dudas

Un saludo, Jose
Yo definiría todos los operadores internamente. Incluso cuando uno de los argumentos es un int. En este último caso porque le doy más importancia al vínculo que tiene el operador con la clase que con un tipo primitivo.

Por cierto, ten en cuenta esto si defines operadores internos:

Código C++:
Ver original
  1. Fecha operator++ (const int); // Operador postfijo
  2.   Fecha operator-- (const int); // Operador postfijo
  3.   Fecha& operator++ ();
  4.   Fecha& operator-- ();
  5.   Fecha& operator+= (const int);
  6.   Fecha& operator-= (const int);
  7.   Fecha operator= (const Fecha&);
Estos operadores modifican al objeto propio( this ). Con lo cual estan bien escritos como están. Sin embargo, para señalar que el elemento this no será modificado cuando hagas una suma, una comparación, etc. hay que añadir const al final:
Código C++:
Ver original
  1. //OPERADORES DE COMPARACION
  2.   bool operator == (const Fecha&) const;
  3.   bool operator != (const Fecha&) const;
  4.   bool operator < (const Fecha&) const;
  5.   bool operator <= (const Fecha&) const;
  6.   bool operator > (const Fecha&) const;
  7.   bool operator >= (const Fecha&) const;
  8.   // etc

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 09/03/2014 a las 09:11

Etiquetas: clases, int, sobrecarga
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:19.