È fortemente dipendente dall'implementazione, ma in genere si otterrà un oggetto vtable per classe che ha funzioni virtuali (classi senza funzioni virtuali o basi non ne hanno bisogno) e un vptr per oggetto di una classe con un vtable (indicando il vtable della classe).
Le cose diventano più complesse se si dispone di più ereditarietà e classi di base virtuali, che possono essere implementate in molti modi. Alcune implementazioni usano un'aggiunta vtable per ogni classe di base addizionale (così si finisce con un vtable per classe base per classe), mentre altri usano un singolo vtable con informazioni extra in esso. Ciò potrebbe comportare la necessità di più vptr per oggetto.
La parola chiave virtual
in B è irrilevante - se la funzione è virtuale nella classe base, sarà virtuale nelle classi derivate a prescindere.
fonte
2012-01-19 19:31:22
ora se modifico il mio pgm come di seguito: rimuovo la parola chiave virtuale dalla classe derivata. Ora quanti vtables saranno creati? – CodeCodeCode
@Pal - Nessuna differenza, la funzione è ancora virtuale. –
@Bo Persson: la funzione è virtuale ma, ci sarà anche un vtable creato per la classe derivata? – CodeCodeCode