BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 18 Clases: Definiciones
Ejercicios Propuestos

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.