vptr(通常位於對象起始處)子類對象 = 父類子對象(含 vptr、成員)+ 子類自有成員。虛函數表合併:父類虛函數在前,子類新增虛函數在後;覆蓋函數替換父類表項。單一 vptr。
每個直接父類對應一個子對象,各含獨立 vptr。子類成員置於最後。第一個父類的 vptr 位於對象起始,子類覆蓋的虛函數會同時更新所有父類 vtable 中對應槽位(保證多態正確)。
虛基類子對象在內存中僅保留一份,通常放在最末端。派生類對象包含指向虛基類的指針(或偏移量),通過 vbptr(虛基類表指針)間接訪問。解決菱形繼承數據冗餘與二義性。
typedef void(*Fun)(); int **vptr = (int**)&obj; for (int i=0; i文中提供單繼承、多重繼承、重復繼承、虛繼承的完整類定義與內存佈局圖示,並給出可直接編譯運行的驗證代碼,輸出虛表函數地址與成員值,極具參考價值。