1. 程式人生 > >C++中public、protected、private的差別

C++中public、protected、private的差別

影響 dsm sin 使用 pub 聲明 友元 fff c++

第一: private,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的差別