I metodi virtuali

  • Questo sistema delle invocazioni indirette ha due svantaggi:
    1. La chiamata indiretta è più lenta della chiamata diretta
    2. 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

© Ing. Stefano Salvi - All rights reserved