Buongiorno,
come funzioni il polimorfismo mi è chiaro, ma non altrettanto il meccanismo che permette tale funzionamento. Se ho due classi B e D, dove D deriva da B che è la classe base, e in B la funzione fun() dichiarata virtual e faccio:
B* pb;
pb = new D;
pb -> fun();
naturalmente verrà chiamata fun() di D, perché il VPTR essendo un attributo appartiene all'oggetto, e l'oggetto istanziato è di tipo D, quindi il VPTR è valorizzato con l'indirizzo della VTABLE di D. La cosa che non mi è chiara però è la seguente:
quando viene chiamato il costruttore di D, questo chiamerà a sua volta (prima che ne venga eseguito il corpo) il costruttore di B. Quindi dovrebbe creare due VPTR, prima quello che indirizza la VTABLE di B e dopo quello che indirizza la VTABLE di D. Ho pensato che in questi casi l'ultimo VPTR creato sovrascriva l'altro, ma è una deduzione mia in mancanza di informazioni.
Grazie