[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