The C++ Compass

The C++ Compass
>FAQ<

FAQ

Home
Home

Risorse
Risorse

Utilities
Utilities

Compilatori
Compilatori

GUI Toolkits
GUI Toolkits

Libri
Libri

Download
Download

FAQ
FAQ



whoami
Who am I
[Precedente] [Indice] [Successiva]


[Classi]


Che cos'è l'eredità virtuale ?

"Concettualmente" (anche se oggi, in pratica, l'implementazione dell'eredità virtuale è fatta con maggior efficienza usando la vtbl), si immagini che ogni classe che ha una base virtuale, invece di una "copia" dei campi-dati di quella base al proprio interno, abbia entro di sè un "puntatore" a un oggetto di quel tipo.
Se quel tipo entra come base virtuale più volte in una eredità multipla, i vari "punti" in cui viene visto come base hanno tutti puntatori allo stesso oggetto di quel tipo; così, appunto come scrive Lippmann, c'è una singola istanza della classe base ("sub-oggetto") per quante volte possa apparire nella gerarchia di eredità multipla.
Un oggetto può facilmente trovare la sua base virtuale (basta seguire il puntatore), ma il percorso inverso non è così facile -- i cast alla C, e static_cast, non sono in grado di farlo; se hai la necessita` di "cast all'indietro" dalla base virtuale a una classe derivata, bisogna farlo sfruttando la run-time type identification, e specificamente con dynamic_cast.




Ultimo aggiornamento : 03/07/2000

email webmaster@thecppcompass.org