Oppure

Loading
05/02/12 17:11
McFly
Salve ragazzi,
ho un problemino con l'ereditarietà, ed in particolare il cast.
Faccio, come al solito.., un esempio per spiegarmi.

class A
{
    protected:
         A *GetQualcosa();
};

class B : public A
{
    ....... qualcosa!
};


Supponiamo di aver ereditato il metodo GetQualcosa nella classe B.
Mi chiedevo, come faccio a far funzione un'assegnazione di questo tipo:

   B *obj1,*obj2;
   obj2 = obj1->GetQualcosa();  // il compilatore mi da problemi!


Ho letto su alcune guide che il cast da una classe base ad una classe derivata non è implicito (downcasting), allora come posso specificarlo? Qual'è il modo migliore?

Grazie!
Ultima modifica effettuata da McFly 05/02/12 18:11
aaa
05/02/12 21:06
Pitagora
In primis tutti i metodi appartenenti allo specificatore di accesso protected, non sono accessibili dall'esterno. Quindi per ovvie ragioni sostituiamo quel protected in public. 
Bene, arriviamo al succo della questione. In C++ si possono effettuare assegnamenti solo da classe padre a classe figlio. Mi spiego meglio con un esempio:
Padre *myPadre = new Figlio; // questo e' possibile.  Da base a derivata
Figlio *myFiglio = new Padre; // errore


Penso che sia chiaro adesso il problema :)

Qui c'è la soluzione nel caso non ti è chiaro qualche cosa pastebin.com/…
Ultima modifica effettuata da Pitagora 05/02/12 21:15
aaa