1 virtual的目的是啟用動態綁定。除了建構函式數之外, 任意非static成員函數都可以虛函數。Virtual只在類的成員函式宣告中出現, 不能用在燈定義體外部出現的函數定義上。
2 public 成員能訪問 ,rivate 不能訪問,只能由本類的成員和友元訪問。
protected 像private 成員一樣, protected成員不能被類的使用者訪問。
像public成員一樣, protected 成員可被類的衍生類別訪問。
3類衍生的資料行表 指定基類。基類可以是一個或多個類。
4 衍生類別一般要重定義所繼承的虛函數。
5 衍生類別對象包含基類對象作為子物件。
衍生類別本身定義的(非static)成員加上由基類(非static)成員子物件。
衍生類別中的函數可以使用基類的成員。
衍生類別可以訪問基類的public 和protrcted 成員,好象自己的成員一樣。
衍生類別本身可以做為基類。
衍生類別的聲明包含類名但不包衍生的資料行表。
例如:
//error d forward declaration must not include the derivation list
class Bulk_item :public Item_base;
//forwaed declarations of bath derived and nonderied class.
class Bulk_item;
class Item_base;
6 從衍生類別到基類的轉換。可以使用一個衍生類別型的對象的地址或引用對基類類型的指標或引用進行賦值或初始化。但是嚴格的說,衍生類別型對象,並沒有轉換為基類類型對象。
7 繼承層級 基類本身指定對自身成員的最小存取控制。如果成員在本類中為private 則順有基類和基類的友元可以訪問該成員。衍生類別不能訪問基類的private成員,也不能使用自己的使用者能夠訪問那些成員。 如果基類成員為public或protected, 則派生中使用的訪問標號決定該成員在衍生類別中的存取層級。
公用繼承 基類成員保持自己的存取層級。基類的public 成員為衍生類別的public的public成員,基類的protected成員為衍生類別的protected成員。
受保護繼承 基類的public 和 protected成員在在衍生類別中為protected成員。
私人繼承 基類的所有成員在精兵簡政類中為private成員。
8 去除個別成員 衍生類別可以恢複繼承成員的存取層級, 但不能使存取層級比基類中原來指定的的更嚴格或更寬鬆。
例如:
class Derived : private Base {
public :
// maintain access levels for members related to the size the objct
using Base::size; //size 在Base中為public 但在Derived中為private
protected:
using Base::n;
}
9 class 定義的衍生類別預設具有private繼承。struct定義的類預設具有public繼承。在繼承關係上也是這樣的。
10 友元可以訪問類的private 和 protected 資料。
友元關係不能繼承。 基類的友元對衍生類別的成員沒有特殊存取權限。如果基類被授予友元關係,則只有基類具有特殊存取權限, 該基類的衍生類別不能訪問授予友元關係的類。
如果衍生類別想要將自己成員的訪問權授予其基類的友元。衍生類別必須顯式的這樣做:基類的友元對從該基類沒有特殊存取權限。 同樣如果基類和派生都需要訪問另一個類,那個類必須特地將存取權限授予基類和每一個衍生類別。
11 如果基類定義了static成員, 則整個繼承層次中只有一個這樣的成員,無論從基類派生出多少衍生類別, 每個static成員只有一個執行個體。
static 成員遵循常規存取控制: 如果成員在基類中為private, 衍生類別不能訪問它。
12 衍生類別到基類的轉換 如果有一個衍生類別型的對象, 則可以使用它的地址對基類類型的指標進行賦值或初始化。(定義基類的指標可以指向衍生類別型)
同樣可以使用衍生類別型的引用或對象基類類型的引用。
13 引用的轉換不同於轉換對象。
-- 《c++ primer》