一、類之間的關系
has-A 包含關系,用以描述一個類由多個“部件類”構成。實現has-A關系用類成員表示,即一個類中的數據成員是另一種已經定義的類。
uses-A 一個類部分地使用另一個類。通過類之間成員函數的相互聯系,定義友員或對象參數傳遞實現。
is-A 機制稱為“繼承”。關系具有傳遞性,不具有對稱性。
二、繼承的重要說明
1、子類擁有父類的所有成員變量和成員函數
2、子類可以擁有父類沒有的方法和屬性
3、子類就是一種特殊的父類
4、子類對象可以當作父類對象使用
三、類與繼承的訪問控制
1.類中成員的訪問控制
public:在類的內部、外部都能使用
protected:在類的內部使用,在繼承的子類中使用
private:只能在類的內部,不能在類的外部(包括繼承中的子類也不能使用)
2. C++中的繼承方式會影響子類的對外訪問屬性
public繼承:父類成員在子類中保持原有訪問級別
private繼承:父類成員在子類中變為private成員
protected繼承:父類中public成員會變成protected
父類中protected成員仍然為protected
父類中private成員仍然為private
3. ‘三看’原則
1)看調用語句,這句話寫在子類的內部、外部
2)看子類如何從父類繼承(public、private、protected)
3)看父類中的訪問級別(public、private、protected)
四、繼承中的兼容性原則
類型兼容規則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代。
void howtoPrint(parent *base) { base->printP();父類的成員函數 } void howtoPrint2(parent &base) { base.printP();父類的成員函數 } { //第一種含義: parent p1; child c1; parent *p = NULL; //1-1 基類指針(引用)指向子類對象 p = &c1; p->printP(); //1-2 指針做函數參數 howtoPrint(&p1); howtoPrint(&c1); //引用做函數參數 howtoPrint2(p1); howtoPrint2(c1); //第二種含義: //可以用 子類對象初始化父類對象 parent p3 = c1; }