C++中public、protected、private的差別
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繼承 = > 子類無權訪問
由以上組合結果能夠看出
1、public繼承不改變基類成員的訪問權限
2、private繼承使得基類全部成員在子類中的訪問權限變為private
3、protected繼承將基類中public成員變為子類的protected成員,其他成員的訪問 權限不變。
4、基類中的private成員不受繼承方式的影響,子類永遠無權訪問。
此外,在使用private繼承時。還存在第二種機制:準許訪問 。
我們已經知道,在基類以private方式被繼承時,其public和protected成員在子類中變為private成員。
然而某些情況下,須要在子類中將一個或多個繼承的成員恢復其在基類中的訪問權限。
C++支持以兩種方式實現該目的
方法一。使用using 語句,這是C++標準建議使用的方式
方法二,使用訪問聲明。形式為 base-class::member;。 位置在子類中適當的訪問聲明處。(註。僅僅能恢復原有訪問權限。而不能提高或減少訪問權限)
C++中public、protected、private的差別