在 Stroustrup 設計的 C++ 物件模型中:
型別資訊物件 通常置於 vtable 第一個槽位,支援 RTTI。
指定繼承為 virtual 表示共享基類子物件。無論在繼承鏈中被派生多少次,虛擬基類永遠只存在一個實體。例如 iostream 僅包含一個 ios 子物件。
指標型別教導編譯器如何解讀記憶體內容與大小。以 32 位元機為例:
int* 存取 4 bytes。ZooAnimal* 涵蓋 vptr (4) + int loc (4) + String name (8) = 16 bytes。派生類別指標與基類指標雖指向同一起始位址,但涵蓋範圍不同。基類指標僅能存取基類子物件成員,除非透過虛擬機制。
Bear b;
ZooAnimal za = b; // 切割發生
za.rotate(); // 呼叫 ZooAnimal::rotate()
切割導致 za 純粹為 ZooAnimal,其 vptr 指向 ZooAnimal 的虛擬表。編譯器在初始化與指派操作中仲裁,確保含有 vptr 的物件不會被基類操作改寫 vptr。
基於對象(OB)提供封裝但無多態與型別擴充。優點:函數呼叫編譯期解析、無 vptr 開銷,速度較快、空間較緊湊。缺點:彈性較低。