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

C++ 學習筆記(三):繼承與派生完整指南

     編輯:關於C++

繼承:代碼復用的核心機制

繼承允許基於現有類(基類/父類)定義新類(派生類/子類),擴展或限制功能,實現代碼復用。

1. 繼承形式

單繼承

class Derived : 訪問方式 Base {
    // 新成員
};

多重繼承

class Derived : 訪問方式 Base1, 訪問方式 Base2, ... {
    // 新成員
};

2. 訪問方式(繼承方式)

繼承方式基類 public基類 protected基類 private
public(公有繼承)publicprotected不可訪問
protected(保護繼承)protectedprotected不可訪問
private(私有繼承)privateprivate不可訪問
  • 默認為 private 繼承。
  • 「不可訪問」指派生類成員及外部均無法訪問基類 private 成員。
  • 私有繼承實質切斷後續派生對基類成員的訪問。

3. 派生類生成三步驟

  1. 吸收基類成員:除構造/析構函數外的所有成員。
  2. 改造基類成員:按繼承方式調整訪問屬性;同名成員發生遮蔽(覆蓋)。
  3. 添加新成員:派生類自有的數據成員與成員函數。

4. 派生類構造/析構函數

單繼承構造函數

Derived::Derived(參數列表) : Base(基類參數) {
    // 派生類初始化
}

多重繼承構造函數

Derived::Derived(參數列表) : Base1(參數1), Base2(參數2) {
    // 參數列表需滿足所有基類初始化需求
}

執行順序

  1. 基類構造函數(按繼承聲明順序左→右)。
  2. 成員對象構造函數(按類中聲明順序)。
  3. 派生類構造函數體。

析構順序完全相反:派生類析構 → 成員對象析構 → 基類析構(右→左)。

5. 虛基類:解決菱形繼承二義性

問題

多重繼承中,多個直接基類共同繼承自同一間接基類 → 派生對象包含多份間接基類副本 → 訪問二義性。

解決方案

  • 作用域運算符顯式限定:Base1::member、Base2::member。
  • 虛基類:class Derived : virtual 訪問方式 Base。派生類只保留一份虛基類子對象。

虛基類構造順序

  1. 所有直接基類中,虛基類優先於非虛基類構造。
  2. 多個虛基類按派生類聲明順序構造。
  3. 若虛基類由非虛基類派生,先構造非虛基類鏈,再按上述規則。

相關文章


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