多重繼承
多重繼承是指從多個直接基類中産生派生類的能力。
多重繼承的派生類繼承了所有父類的屬性。
struct Base1 {
Base1() = default;
Base1(const string&);
Base1(shared_ptr<int>);
};
struct Base2 {
Base2() = default;
Base2(const string&);
Base2(int);
};
struct D1 :public Base1, public Base2 {
using Base1::Base1;
using Base2::Base2;
D1(const string& s) :Base1(s), Base2(s) {}
D1() = default;
};
虛繼承
虛繼承的目的是令某個類做出聲明,承諾願意共享它的基類。其中,共享的基類對象稱為虛基類。
虛繼承就是為了解決繼承中的二義性。
class ZooAnimal {};
class Raccoon : public virtual ZooAnimal {};//ZooAnimal定義成了Raccoon和Bear的虛基類。
class Bear : virtual public ZooAnimal {};//兩種方式相同
因為Bear和Raccoon是虛繼承,是以Panda中隻有一個ZooAnimal基類部分
class Panda : public Raccoon, public Bear {};