1.虛擬繼承 --繼承了多個(gè)基類(lèi)實(shí)例, 但只需要一份單獨(dú)的共享實(shí)例
2.對(duì)于一個(gè)類(lèi)的基類(lèi)的數(shù)目, c++沒(méi)有限制(可以多繼承)
   兩個(gè)基類(lèi)是最常見(jiàn)的, 一個(gè)基類(lèi)常常用于表示一個(gè)共有抽象接口, 第二個(gè)基類(lèi)提供是有的實(shí)現(xiàn)
   從第三個(gè)或更多個(gè)直接基類(lèi)繼承而來(lái)的派生類(lèi)遵循mixin-based設(shè)計(jì)風(fēng)格
3.基類(lèi)構(gòu)造函數(shù)被調(diào)用的順序以派生表中聲明的順序?yàn)闇?zhǔn)
4.在多繼承下, 派生類(lèi)可以從兩個(gè)或者更多個(gè)基類(lèi)中繼承同名的成員 --直接訪問(wèn)是二義的, 將導(dǎo)致編譯時(shí)刻錯(cuò)誤, 所以要顯示指明調(diào)用哪個(gè)基類(lèi)的哪個(gè)成員 Base::member
5.public派生被稱(chēng)為類(lèi)型繼承(type inheritance) --派生類(lèi)是基類(lèi)的子類(lèi)型
   提供了較一般的基類(lèi)的一種特化
6.private派生被稱(chēng)為實(shí)現(xiàn)繼承(implementation hinheritance) --派生類(lèi)不直接支持基類(lèi)的公有接口, 提供了自己的公有接口, 重用基類(lèi)的實(shí)現(xiàn)
   private基類(lèi)放映了一種"并非基于子類(lèi)型關(guān)系"的繼承形式, 基類(lèi)的整個(gè)公有接口在派生類(lèi)中變成private
7.對(duì)于is-a子類(lèi)型關(guān)系來(lái)說(shuō), public繼承是一個(gè)很有利的機(jī)制
8.has-a關(guān)系一般由組合(composition)而不是繼承來(lái)支持 --使一個(gè)類(lèi)稱(chēng)為另一個(gè)類(lèi)的成員
   a:如果我們希望改寫(xiě)一個(gè)類(lèi)的虛擬函數(shù), 則必須使用私有繼承而不是使用組合
   b:如果我們希望一個(gè)類(lèi)能夠引用"一個(gè)包含多種可能類(lèi)型的層次結(jié)構(gòu)"中的一個(gè)類(lèi), 那么就必須通過(guò)引用使用組合
   c:如果只是希望簡(jiǎn)單的重用實(shí)現(xiàn), 則按值組合比繼承更好
   d:如果希望對(duì)象的遲緩型分配, 按引用(使用一個(gè)指針)組合通常是一個(gè)不想的設(shè)計(jì)選擇
9.免除(exempting)個(gè)別成員的私有繼承影響
   以私有方式繼承, 基類(lèi)的所有protected和public成員全被繼承為子類(lèi)的私有成員
   類(lèi)設(shè)計(jì)者可以針對(duì)基類(lèi)的個(gè)別成員, 是其免除非公有派生的影響:
      class CSub: private CBase {
      public:
          using CBase::Member;
      };
   免除個(gè)別成員的另一個(gè)原因是允許后續(xù)的派生類(lèi)訪問(wèn)私有基類(lèi)的protected成員
   派生類(lèi)只能將繼承得到的成員恢復(fù)到原來(lái)的訪問(wèn)級(jí)別, 該訪問(wèn)級(jí)別不能比基類(lèi)中原來(lái)指定的級(jí)別更嚴(yán)格或更不嚴(yán)格
10.protected繼承 --基類(lèi)的所有公有成員都成為派生類(lèi)的protected成員
11.對(duì)象組合有兩種形式
   a:按值組合(Composition by value)
   b:按引用組合(Composttion by reference)
12.虛擬繼承(virtual inheritance) --在虛擬繼承下, 只有一個(gè)共享的基類(lèi)子對(duì)象被繼承, 而無(wú)論該基類(lèi)在派生層次中出現(xiàn)多少次
   共享的基類(lèi)子對(duì)象被稱(chēng)為虛擬基類(lèi)(vitual base class)
   在虛擬繼承下, 基類(lèi)子對(duì)象的復(fù)制及由此引起的二義性都被取消了
13.虛擬繼承的語(yǔ)法:
    CSub: public virtual CBase1, public virtual CBase2 {...};
   virtual 和 public的順序不重要