protected: 可以被該類中的函數、子類的函數、以及其友元函數訪問,但不能被該類的對象訪問
public: 可以被該類中的函數、子類的函數、其友元函數訪問,也可以由該類的對象訪問
注:友元函數包括兩種:設為友元的全局函數,設為友元類中的成員函數
第二:類的繼承后方法屬性變化:
使用private繼承,父類的所有方法在子類中變為private;
使用protected繼承,父類的protected和public方法在子類中變為protected,private方法不變;
使用public繼承,父類中的方法屬性不發生改變;
三種訪問權限
public:可以被任意實體訪問
protected:只允許子類及本類的成員函數訪問
private:只允許本類的成員函數訪問
三種繼承方式
public 繼承
protect 繼承
private 繼承
組合結果
基類中 繼承方式 子類中
public & public繼承 => public
public & protected繼承 => protected
public & private繼承 = > private
protected & public繼承 => protected
protected & protected繼承 => protected
protected & private繼承 = > private
private & public繼承 => 子類無權訪問
private & protected繼承 => 子類無權訪問
private & private繼承 = > 子類無權訪問
由以上組合結果可以看出,protected繼承和private繼承能降低訪問權限:
1、public繼承不改變基類成員的訪問權限
2、private繼承使得基類所有成員在子類中的訪問權限變為private
3、protected繼承將基類中public成員變為子類的protected成員,其它成員的訪問 權限不變。
4、基類中的private成員不受繼承方式的影響,子類永遠無權訪問。
此外,在使用private繼承時,還存在另外一種機制:准許訪問 。
我們已經知道,在基類以private方式被繼承時,其public和protected成員在子類中變為private成員。然而某些情況下,需要在子類中將一個或多個繼承的成員恢復其在基類中的訪問權限。
C++支持以兩種方式實現該目的
方法一,使用using 語句,這是C++標准建議使用的方式
方法二,使用訪問聲明,形式為 base-class::member;, 位置在子類中適當的訪問聲明處。(注,只能恢復原有訪問權限,而不能提高或降低訪問權限)