[C con Clase] Clases : pregunta teorica

Salvador Pozo salvador en conclase.net
Vie Mayo 18 00:24:41 CEST 2007


El pasado 2007-05-17 20:47:20, rodolfo escribió:
 
r> ... Me gusto eso de que :
r> "Las variables 'double' a pesar de tener gran precisión, no son precisas.". 

Bueno, en realidad no quise decir eso :">
Lo que quería decir que que, debido al modo en que se almacenan las variables en coma flotante, es imposible tener una exactitud total al almacenar o manipular un número.

r> Bueno, a mi pregunta sobre clases. En realidad es una pregunta teorica.
r> Si por ejemplo tengo una clase de nombre fecha...
r> Si quiero una funcion que reste o que compare dos fechas, es correcto desde 
r> el punto de vista de la  POO incluirla en la clase, o debe ser externa a la 
r> clase.

Lo correcto es incluirla en la propoa clase, y cuando sea posible, mediante la sobrecarga de operadores. Esto proporciona una forma intuitiva de operar con objetos de una clase.

De hecho, lo mismo pasa con los operadores que aplicamos a los tipos fundamentales: existen versiones diferentes del operador suma (por ejemplo), para objetos enteros y para objetos en coma flotante.

r> Y si estuviera en la clase,¿como obtendria la segunda fecha si solo tengo un 
r> dato(dia, mes y anio)?

La lógica nos dice que las cantitades que pueden compararse deben cumplir las mismas condiciones que para sumarse o restarse. En la escuela nos decían que no podíamos sumar peras y manzanas. 

En C++ pasa lo mismo, no podemos sumar enteros y números con decimales. Si lo hacemos, el compilador convierte el número entero a coma flotante antes de sumarlos. Es lo que se llama promoción automática.

Nuestro operador de comparación debe tomar dos objetos de la misma clase, por la sencilla razón de que no es posible comparar una fecha con un número entero, o en coma flotante.

Si existe una forma de convertir una fecha en un número entero, entonces deberemos sobrecargar los operadores de conversión de tipo y crear un constructor que tome como parámetro de entrada un entero.

Si, por ejemplo, hemos sobrecargado el operador == para nuestra clase de fechas, de modo que compare dos fechas, y además disponemos de un constructor para fecha que tome como entrada un entero, y comparamos una fecha con un entero, el compilador promociona automáticamente el entero a fecha y después hace la comparación.

Espero haberme explicado con claridad. ;-)

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase