在C++語言中,每個有虛函式的類或者虛繼承的子類,編譯器都會為它生成一個虛擬函式表(簡稱:虛表),表中的每一個元素都指向一個虛函式的地址。(注意:虛表是從屬於類的)
此外,編譯器會為包含虛函式的類加上一個成員變數,是一個指向該虛函式表的指針(常被稱為vptr),每一個由此類別派生出來的類,都有這么一個vptr。虛表指針是從屬於對象的。也就是說,如果一個類含有虛表,則該類的所有對象都會含有一個虛表指針,並且該虛表指針指向同一個虛表。
虛表的內容是依據類中的虛函式聲明次序--填入函式指針。派生類別會繼承基礎類別的虛表(以及所有其他可以繼承的成員),當我們在派生類中改寫虛函式時,虛表就受了影響;表中的元素所指的函式地址將不再是基類的函式地址,而是派生類的函式地址。