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

C++ 繼承與派生:構造/析構順序、虛繼承原理

     編輯:關於C++

繼承基礎

C++ 支持多重繼承。繼承方式:public(保持訪問級別)、protected(公有變保護)、private(公有/保護變私有)。

構造與析構順序

  1. 基類構造函數:按繼承聲明順序(從左到右)調用。
  2. 成員對象構造函數:按類中聲明順序調用。
  3. 派生類自身構造函數。
  4. 析構順序完全相反:派生類析構 → 成員對象(逆序) → 基類(逆序)。

虛繼承

解決菱形繼承中基類多份拷貝問題。虛基類由最派生類直接構造,構造順序優於非虛基類。虛表指針 (vptr) 指向虛函數表 (vtbl),實現多態與虛基類共享。

代碼示例

// 普通多重繼承構造順序
class Base1 { public: Base1() { cout << "Base1"; } };
class Base2 { public: Base2() { cout << "Base2"; } };
class Derived : public Base1, public Base2 { // Base1 -> Base2 -> Derived
public: Derived() { cout << "Derived"; }
};

// 虛繼承
class VBase { public: VBase() { cout << "VBase"; } };
class VDer1 : virtual public VBase { public: VDer1() { cout << "VDer1"; } };
class VDer2 : virtual public VBase { public: VDer2() { cout << "VDer2"; } };
class Final : public VDer1, public VDer2 { // VBase -> VDer1 -> VDer2 -> Final
public: Final() { cout << "Final"; }
};

總結

理解構造/析構順序對資源管理至關重要。虛繼承通過 vptr/vtbl 機制確保虛基類單一實例,但增加了內存佈局複雜度。

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