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

C++ 繼承機制詳解:基類派生類、構造順序、訪問控制與虛繼承

     編輯:C++ 入門

C++ 繼承機制詳解:從基礎到虛繼承

繼承建立「is-a」關係。基類(父類)定義通用屬性,派生類(子類)擴展特化功能。本文系統梳理公有繼承、構造函數調用順序、protected 成員訪問、虛繼承解決菱形問題等核心概念。

一、基類與派生類定義

class TableTennisPlayer {
    string firstname, lastname; bool hasTable;
public:
    TableTennisPlayer(const string& fn="none", const string& ln="none", bool ht=false);
    void Name() const; bool HasTable() const { return hasTable; }
    void ResetTable(bool v) { hasTable = v; }
};
class RatedPlayer : public TableTennisPlayer {
    unsigned int rating;
public:
    RatedPlayer(unsigned int r=0, const string& fn="none", const string& ln="none", bool ht=false);
    RatedPlayer(unsigned int r, const TableTennisPlayer& tp);
    unsigned int Rating() const { return rating; }
    void ResetRating(unsigned int r) { rating = r; }
};

二、構造函數調用順序

1. 基類構造函數(按繼承聲明順序)
2. 成員對象構造(按聲明順序)
3. 派生類初始化列表
4. 派生類構造函數體
派生類構造函數必須在初始化列表中顯式調用基類構造函數傳遞參數。

三、訪問控制與 protected

public 繼承:基類 public → 派生類 public;基類 protected → 派生類 protected;基類 private → 派生類不可直接訪問。
protected 成員允許派生類直接訪問,但破壞封裝性,易導致無效狀態,建議優先使用 private + public/protected 方法。

四、多重繼承與虛繼承

菱形繼承導致基類成員重複。虛繼承(virtual public Base)確保只有一份基類子對象。最遠派生類必須顯式初始化虛基類,中間類對虛基類的初始化被忽略。構造順序:虛基類(深度優先左到右)→ 非虛基類 → 成員 → 函數體。

五、虛析構函數

基類指針刪除派生類對象時,若基類析構非虛,僅調用基類析構導致資源洩漏。聲明 virtual ~Base() 確保正確調用派生類析構釋放資源。多態使用時必須虛析構。

掌握繼承機制細節,是設計健壯 C++ 類層次結構的基礎。

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