[C con Clase] Duda sobre herencia

Davidson, Steven srd4121 en njit.edu
Jue Mayo 30 09:14:15 CEST 2013


Hola Alexis,

2013/5/29 Alexis García Báez <ybaez en infomed.sld.cu>

> Hola a todos, estoy haciendo un proyecto de curso para la universidad en
> C++
> Borland 6 (nos obligan a usarlo)
>

Esta parte del código fuente no es necesaria:

if (typeid(ptrCuorses[i]) == typeid(TProfesorCourse))

De hecho, hacer cosas así casi siempre conlleva a la conclusión de que uno
ha diseñado incorrectamente el programa.

En tu caso, no necesitas usar 'typeid'. Como tienes clases relacionadas
entre sí a través de la herencia, usamos 'dynamic_cast<>' para intentar
convertir un objeto de una clase base a uno de clase derivada. En tu caso,
haríamos esto:

TProfesorCourse *ProCourse;
...

ProCourse = dynamic_cast< TProfesorCourse * >( &ptrCourses[i] );

if( ProCourse )
{
  // Conversión exitosa: usamos 'ProCourse'
  ...
}

Puedes consultar este operador de "cásting" en el capítulo 42 de nuestro
curso de C++. Puedes dirigirte a:
http://c.conclase.net/curso/index.php?cap=042c#CAS_dynamic


Todo esto se basa en que queremos invocar una función miembro exclusivo de
'TProfesorCourse'; es decir, que no sea una función miembro heredada. Si se
trata de una función heredada de 'TCourse', entonces deberías usar
polimorfismo para no tener que averiguar explícitamente la clase original
de cada objeto. Simplemente invocamos la misma función, y el sistema de
polimorfismo elegiría la versión correcta basada en la clase original.


Espero que esto te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130530/68ec8fcc/attachment.html>


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