含虛函數的類,編譯器生成靜態虛函數表(數組),存儲虛函數地址。對象首地址放置指向虛表的指針 vptr。調用虛函數時:obj->vptr[index]()。
子類虛表 = 父類虛函數地址序列 + 子類新增虛函數地址序列。順序遵循聲明順序,父類優先。
覆蓋函數替換父類虛表對應槽位。子類虛表長度 = 父類虛函數數 + 子類新增虛函數數。調用通過同一 vptr 實現多態。
每個直接父類擁有獨立虛表。子類對象包含多個 vptr(每個父類子對象一個)。第一個父類 vptr 位於對象起始。子類覆蓋函數需同步更新所有父類虛表中該槽位,確保任意父類指針調用均解析到子類實現。
int **vptr = (int**)&obj; for (int i=0; i文中給出無覆蓋、有覆蓋、多重繼承三種場景的完整類定義、虛表圖示與運行輸出,清晰展示地址佈局與調用流程。