Le i metodi di una classe a linking statico (default) vedono le rispettive call "fissate" dal compilatore poichè conosce l'indirizzo. Quelli a linking dinamico (virtual) non sono chiaramente prestabiliti dal compilatore, quindi per quella classe viene preparata una tavola che raggruppi tutti i metodi virtuali, la vtable. In pratica quindi le vtable le crei indirettamente mentre prepari le dichiarazioni dei metodi delle classi.
Se vuoi approfondire, ho pubblicato sul mio sito una relazione per un corso universitario che spiega come viene implementata l'ereditarietà multipla in c++. Non è direttamente attinente ma le vtable sono illustrate più nel dettaglio ed anche in riferimento all'ereditarietà singola.
http://greyfox.imente.org/index.php?id=76
![]()