18.14.-
Escriba una clase de numeros racionales. Usaremos las funciones
friend suma, resta, mult, div, menor y copiar que realizan las operaciones
+, -, *, /, < e =.
Defina
una clase para números racionales. Un número racional
es un "quebrado" formado por dos enteros y una indicación
de división. La división no se efectúa, sólo
se indica, como en 1/2, 2/3, 15/32, 16/5. Los números racionales
se representan como dos valores int, numerador y denominador.
Un
principio de la construcción de tipos de datos abstractos
es que debe hacer constructores para crear objetos con cualesquiera
valores válidos. Usted deberá incluir constructores
para crear objetos con pares de valores int; éste es un constructor
con dos parámetros int. Puesto que todo int también
es un racional, como 2/1 o 17/1, se debe proporcionar un constructor
con un sólo parámetro int.Proporcione funciones miembro
entrada y salida que reciban un argumento istream y ostream, respectivamente,
y obtengan números racionales en la forma 2/3 o 37/51 del
teclado (o de un archivo).
Proporcione
funciones friend suma, resta, mult y div que tengan dos argumentos
racionales por referencia y devuelvan un valor racional. Proporcione
una función menor que devuelva un valor bool y que tenga
dos parámetros racionales por referencia. Estas funciones
deberán efectuar la operación que su nombre sugiere.
Proporcione una función friend neg que tenga un sólo
parámetro racional por referencia y devuelva el negativo
del número racional. Proporcione una función friend
void copiar que tenga dos parámetros racionales por referencia.
El primero se llama a y el segundo se llama de. Esta función
copia un racional en otro.
Proporcione
una función main que pruebe exhaustivamente la implementación
de su clase. Las siguientes fórmulas serán útiles
para definir funciones:
a/b
+ c/d = (a*d + b*c) / (b*d)
a/b
- c/d = (a*d - b*c) / (b*d)
a/b
* c/d = (a*b) / (c*d)
(a/b)
/ (c/d) = (a*d) / (c*b)
-(a/b)
= (-a/b)
(a/b)
< (c/d) significa (a*d )< (c*b)
(a/b)==(c/d)
significa (a*d) == (c*b)
El
signo lo lleva el numerador, el denominador es siempre positivo.
18.15.-
Considere la clase bicycle.
En base a sus conocimientos de algunos componentes básicos
y comunes de las bicicletas, muestre una jerarquía de clases
en la cual la clase bicycle hereda de otras clases, las cuales a
su vez también heredan de otras clases. Analice la producción
de varios objetos de la clase bicycle. Analice la herencia correspondiente
a la clase bicycle para otras clases derivadas intimamente relacionadas.
18.16.-
Analice el por qué se considera
peligroso para el compilador la conversión del apuntador
de clase base a un apuntador de clase derivada.
18.17.-
Señale todas las formas que le vengan a la mente tanto de
dos como de tres dimensiones, y organice estas formas en una
jerarquía de formas. Su jerarquía deberá
tener una clase base Shape, a partir de la cual se derivarán
la clase TwoDimensionalShape y la clase ThreeDimensionalShape. Una
vez desarrollada la jerarquía, defina cada una de las clases
en la jerarquía. Esta es una técnica conocida como
polimorfismo, es decir , el procesamiento de todas las formas
como objetos de la clase base Shape.
|