Вы находитесь на странице: 1из 3

Conversiones entre objetos de clases base y clases derivadas

A pesar del hecho de que un objeto de clase derivada tambin es un objeto de la clase base, el tipo
de la clase derivada y el tipo de la clase base son diferentes. En una herencia pblica, los objetos
de la clase derivada tiene miembros que corresponden a cada uno de los miembros de la clase
base; pero recuerde que la clase derivada puede tener ms miembros que la clase base. La
asignacin en la otra direccin no est permitida, debido a que la asignacin de un objeto de la
clase base a un objeto de la clase derivada dejara indefinidos los miembros adicionales de la clase
derivada. Aunque dicha asignacin no est permitida de modo natural, podra hacerse legtima
al proporcionar un operador de asignacin sobrecargado apropiado y/o un constructor de
conversin.

Error comn de programacin.

Asignar un objeto de clase derivada a un objeto de su clase base correspondiente, y luego intentar
hacer referencia a miembros exclusivos de la clase derivada en el nuevo objeto de la clase base, es
un error de sintaxis.

Con la herencia pblica, un apuntador a un objeto de la clase derivada puede convertirse


implcitamente en un apuntador de un objeto de clase base debido a que un objeto de clase
derivada es un objeto de clase base. Existen cuatro formas posibles de mezclar y de hacer coincidir
apuntadores de clase base y apuntadores de clase derivada con objetos de clase base y objetos de
clase derivada:

1.- Hacer referencia a un objeto de la clase base con un apuntador de la clase base es directo.

2.- Hacer referencia a un objeto de la clase derivada con un apuntador de la clase derivada es
directo.

3.- Hacer referencia a un objeto de la clase derivada con un apuntador de la clase base es seguro,
ya que el objeto de clase derivada tambin es un objeto de su clase base. Dicho cdigo solamente
puede hacer referencia a los miembros de la clase base. Si este cdigo hace referencia a los
miembros que son solo de la clase derivada, a travs del apuntador a la clase base, la
computadora reportara un error de sintaxis.

4.- Hacer referencia a un objeto de la clase base con un apuntador de la clase derivada, es un error
de sintaxis. El apuntador de la clase derivada primero debe hacer la conversin a un apuntador de
la clase base.

Convertir un apuntador de clase base en un apuntador de clase derivada puede provocar errores si
dicho apuntador se utiliza para hacer referencia a un objeto de la clase base que no tiene los
miembros requeridos en la clase derivada.
Por conveniente que pueda ser tratar a los objetos de clases derivadas como objetos de clase
base, y poder manipular todos estos objetos mediante apuntadores de clase base, existe un
problema. Por ejemplo, en un sistema de nomina nos gustara poder recorrer una lista ligada de
empleados y calcular el pago semanal de cada persona. Pero el uso de apuntadores de la clase
base solamente permite al programa llamar a la rutina de clculo de nomina de la clase base (si
existiera dicha rutina en la clase base). Necesitamos una forma de invocar la rutina que calcule la
nomina apropiada para cada objeto, ya sea un objeto de la clase base o un objeto de la clase
derivada, y hacer esto simplemente con el uso del apuntador a la clase base. La solucin es utilizar
funciones virtuales y polimorfismo.

Al trabajar con objetos pertenecientes a una misma jerarqua de clases se


tiene que:

Cualquier objeto de una subclase puede ser asignado a un objeto de su


superclase
Cualquier objeto de una superclase puede ser asignado a una subclase con
una conversin de tipo ( cast ) adecuada

Conversin de clase derivada a clase base (subclase a superclase)

Al declarar una clase como una extensin de otra clase, los objetos de la clase
derivada son a su vez objetos de la clase base. Si, por ejemplo, tenemos la
jerarqua:

Persona

Estudiante Profesor

Un objeto Estudiante puede verse segn la Figura 1:

Parte correspondiente
a Persona

Parte propia (especfica)


de Estudiante

Figura 1. Ejemplo de un objeto derivado

Se puede afirmar que un Estudiante es una Persona, porque posee todas


las caractersticas y comportamientos de la clase Persona. Por ejemplo:
Persona p1, p2;
Estudiante e = new Estudiante( );
Profesor prof = new Profesor( );
p1 = e; // conversin de un objeto de clase derivada a clase base
p2 = (Persona) prof; // conversin de un objeto de clase derivada a clase
base usando casting

Cuando se realizan estas conversiones el objeto no cambia solo cambia la forma


en que lo ve el compilador.

Вам также может понравиться