- Questo sistema delle invocazioni indirette ha due svantaggi:
- La chiamata indiretta è più lenta della chiamata diretta
- Occorre aggiungere attributi puntatore impliciti ad ogni oggetto, quindi ogni
oggetto utilizzerà più memoria
- Si può notare, a questo punto, che la stragrande maggioranza dei metodi non ha
la necessità di essere polimorfo
- Sarebbe allora stupido pagare per ogni metodo il prezzo dei metodi polimorfi, quando solo
pochi richiedono veramente il polimorfismo
- Si introducono allora i metodi virtuali, che possiedono la proprietà del polimorfismo
- Un metodo virtuale produrrà un attributo nascosto nella classe e del codice
automatico nel creatore per assegnare il valore a quell'attributo, ad ogni
creazione di oggetto
- Ricapitolando, quando abbiamo una variabile polimorfa:
- Se invocheremo un metodo normale verrà invocato il metodo della classe della
variabile
- Se invocheremo un metodo virtuale verrà invocato il metodo della classe
dell'oggetto
- Faccio notare che anche un metodo virtuale può essere ereditato senza
cambiamenti
|