Lezione 6 - Perche' il polimorfismo e' cosi' complicato in C++

In Java ogni classe e' una sottoclasse di un'altra classe a partire dalla classe Object e puo' ridefinire qualsiasi metodo della superclasse. Inoltre e' possibile definire delle classi astratte che stanno li solo per realizzare una interfaccia in quanto hanno dei metodi astratti(senza codice) che devono essere necessariamente ridefiniti dalle sottoclassi. All'atto dell'esecuzione ogni chiamata di metodo viene trattata in maniera dinamica ,cercando nella gerarchia delle classi. Questa possibilita' di definire un'interfaccia comune per oggetti di tipo diverso ma parenti, e' la base del polimorfismo.
In C++ la chiamata dinamica (dinamic linking) non e' il solo comportamento possibile anzi il comportamento normale di default e' di creare un normale programma con tutte le chiamate risolte prima dell'esecuzione(infatti esiste anche una fase di link).Per complicare ulteriormente le cose , ogni metodo e' di default inline percio' il suo codice potrebbe essere incluso direttamente nel sorgente senza bisogno di link!
Per questo motivo, se si vuole ottenere il polimorfismo e percio' il link dinamico, occorre dichiarare i metodi corrispondenti esplicitamente come virtual e inoltre l'oggetto deve essere dichiarato con puntatore!
Un metodo virtuale senza definizione (cioe' astratto) definisce la classe come astratta.
I metodi virtuali si dice che sono richiamati non direttamente ma attraverso una tabella di funzioni virtuali. Quindi il polimorfismo funziona solo coi metodi virtuali e con gli oggetti dichiarati con i puntatori.
INDIETRO a Imparate C++ in una settimana
INDIETRO a Da Java al C++
Maintained by Giuseppe Zito: Giuseppe.Zito@cern.ch
Ultimo aggiornamento: