[C con Clase] Duda sobre herencia

Alexis García Báez ybaez en infomed.sld.cu
Jue Mayo 30 03:42:30 CEST 2013


Por supuesto Steven, claro que nos ayuda, en cuanto los pruebe te dejo
saber, gracias por todo bro.

Alexis

 

De: Cconclase [mailto:cconclase-bounces en listas.conclase.net] En nombre de
Davidson, Steven
Enviado el: jueves, 30 de mayo de 2013 9:14
Para: Lista de correo sobre C y C++
Asunto: Re: [C con Clase] Duda sobre herencia

 

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

 



--

Este mensaje le ha llegado mediante el servicio de correo electronico 
que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistem
a Nacional de Salud. La persona que envia este correo asume el compromiso de
 usar el servicio a tales fines y cumplir con las regulaciones establecidas


Infomed: http://www.sld.cu/


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


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