Come viene chiamato il metodo della funzione corretta in fase di esecuzione?

3

Supponiamo di avere una classe base A e una classe derivata B . A implementa un metodo virtuale foo() che è sovraccarico in B .

Se abbiamo un oggetto test di tipo B , allora l'oggetto conterrebbe sicuramente entrambe le implementazioni di foo() . Quando chiamiamo il metodo, come si trova il metodo corretto (più derivato)?

Il vptr contenuto nella classe base potrebbe entrare in uso forse ...?

    
posta M-R 18.09.2016 - 02:58
fonte

1 risposta

4

Se una funzione / metodo è virtuale, significa che l'oggetto ha una tabella di puntatori e uno di essi punta a quella funzione. (Come sottolineato da @ gnasher729, quella tabella è condivisa tra tutte le istanze di una classe, quindi richiede uno spazio minimo.)

Se B non sovrascrive la funzione, la tabella punta alla versione di A della funzione.

Se A definisce la funzione come pure virtuale, allora B deve sovrascriverlo, perché A non ha definizione per la funzione.

    
risposta data 18.09.2016 - 03:13
fonte

Leggi altre domande sui tag