C++ 支持多重繼承。繼承方式:public(保持訪問級別)、protected(公有變保護)、private(公有/保護變私有)。
解決菱形繼承中基類多份拷貝問題。虛基類由最派生類直接構造,構造順序優於非虛基類。虛表指針 (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 機制確保虛基類單一實例,但增加了內存佈局複雜度。