首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 基類指針指向派生對象:多態核心機制與實戰場景

     編輯:程式設計綜合問答

語法含義

Father *a = new Son(); // 基類指針指向派生對象
Son *b = new Son();
Father *a = b;         // 派生類指針隱式轉換為基類指針

這是 C++ 多態的基石:基類類型具有更廣泛的通用性,可統一管理派生類對象集合。

三大經典應用場景

  1. 容器存儲異構對象:std::vector<Base*> 存放各派生類指針,統一調用虛函數。
  2. 工廠模式返回基類接口:Base* create(int type) 根據參數返回不同派生實例,調用者無需知悉具體類型。
  3. 回調與策略模式:框架定義基類接口,用戶傳入派生實例實現定制行為(如比較器、繪製器)。

關鍵前提:虛函數與虛析構函數

  • 基類必須聲明 virtual 函數實現動態綁定。
  • 基類析構函數必須為 virtual,否則 delete base_ptr 導致派生部分資源洩漏。

非多態的「切片」陷阱

Father a = *b; // 對象切片!僅拷貝基類部分,失去派生特性

值傳遞會觸發切片,務必使用指針或引用保持多態性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved