首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 多態核心特性總結:虛函數、虛析構、虛函數表與實作機制

     編輯:關於C++

九大核心特性

  1. 虛函數可繼承:子類同名同參同返回值函數自動成為虛函數,父類指標指向子類物件時調用子類版本 —— 這就是多態。
  2. 虛析構函數:防止父類指標刪除子類物件時記憶體洩漏(僅調用父類析構)。
  3. 虛函數表實作:C++ 多態通過 vtable(虛函數表)實現動態綁定。
  4. 每類一張表:每個含虛函數的類別有一張靜態虛函數表,所有物件共享。
  5. 指標可能重合:父子類虛函數表中相同函數指標指向同一代碼地址(子類未覆寫時)。
  6. 純虛析構也生成表:類別僅含虛析構函數時仍會產生虛函數表。
  7. 語法核心:多態具體表現為「父類指標/參考指向子類物件,調用子類覆寫方法」。
  8. 繼承是基礎:無繼承則無多態。
  9. virtual 關鍵字:建立多態關係的語法核心,必須使用。

記憶體模型示意

物件記憶體佈局:
+----------------+
| vptr (指向 vtable) |  ← 每個物件隱含指標
+----------------+
| 資料成員         |
+----------------+

虛函數表 (vtable):
+----------------+
| &Base::func1   |
| &Base::func2   |
| &Derived::func3|  ← 覆寫函數指向子類實作
+----------------+

最佳實踐

  • 基類析構函數**必須宣告為 virtual**。
  • 覆寫虛函數建議加 override (C++11) 防止簽名錯誤。
  • 避免在建構子/析構子中呼叫虛函數(行為非預期)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved