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