[C con Clase] CLASES DERIVADAS
Programante
programante en gmail.com
Sab Jun 27 23:52:14 CEST 2009
Pedro Rodríguez González escribió:
> Que tal maestros de C con Clase... nuevamente vuelvo con mis dudas,
> que seguro que alguno ya las echaba de menos
>
> Resulta que para averiguar el tipo de una clase, se me ha "ocurrío"
> sobrecargar un método y de momento todo Ok...
>
> class Pura
> {
> ...
> virtual ~Pura()=0;
> ...
> };
>
> class HijaDePura : public Pura
> {
> ...
> };
>
> class HijoDePura : public Pura
> {
> ...
> };
>
> void QuienEsQuien(HijoDePura&);
>
> void QuienEsQuien(HijaDePura&);
>
> Hasta aquí todo Ok, pero el problema es cuando lo anido, tomando la
> clase base...
>
> void Quien(Pura& clase)
> {
> QuienEsQuien(clase); // ERROR!!! toma "clase" cómo si fuera "Pura"
> ...
> }
>
> Por qué no surte los efectos deseados, _siendo "clase" un derivado de
> Pura_? Gracias anticipadas y resaludos...
> Pedro
Porque C++ no funciona así.
Resuelve los parámetros con la información local que tiene. Que en este
caso es que se trata de una Pura.
Lo que puedes hacer es usar métodos sobrecargados:
class Pura
{
...
virtual string QuienEs()=0;
virtual ~Pura()=0;
...
};
class HijaDePura : public Pura
{
...
virtual string QuienEs() {...}
};
class HijoDePura : public Pura
{
...
virtual string QuienEs() {...}
};
void Quien(Pura& clase)
{
cout << clase->QuienEs();
...
}
O bien puedes usar rtti para que te lo resuelva:
void Quien(Pura& clase)
{
cout << *typeid*(clase).name();
}
Más información sobre la lista de distribución Cconclase