C++的類和對象--權限public-private-protected


  類是一種將抽象轉換為用戶自定義類型的C++工具,它將數據表示(基本成員)和操作數據的方法(成員函數)組合成一個整潔的包

 

  兩個表格有由自己整理,其他參考自:http://blog.163.com/clevertanglei900@126/blog/static/1113522592010114102759821/

  當private,public,protected單純的作為一個類中的成員權限設置時:

  

C++的類和對象的權限1
權限 類內部 該類對象 子類(派生類) 友元函數
private 可訪問  不可訪問   不可訪問 可訪問
public 可訪問 可訪問 可訪問 可訪問
protected 可訪問 不可訪問  可訪問 可訪問


  private: 只能由該類中的函數、其友元函數訪問,不能被任何其他訪問,該類的對象也不能訪問.

  protected: 可以被該類中的函數、子類的函數、以及其友元函數訪問,但不能被該類的對象訪問

  public: 可以被該類中的函數、子類的函數、其友元函數訪問,也可以由該類的對象訪問
  注:友元函數包括兩種:設為友元的全局函數,設為友元類中的成員函數
 
  當private,public,protected作為繼承方式時:
 
C++的類和對象的權限2(相對於基類成員)
繼承方式 基類對象 派生類 派生類對象
public 可訪問

可訪問

內部權限變化:

public->public

private ->private

protected->protected

可訪問

 

private 不可訪問  

可訪問

內部權限變化:

public->private

private ->private

protected->private

 不可訪問
protected 不可訪問  

可訪問

內部權限變化:

public->protected

private ->private

protected->protected

 不可訪問
  對於公有繼承方式:
  (1)父類的public成員成為子類的public成員,允許類以外的代碼訪問這些成員
  (2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
  (3)父類的protected成員成為子類的protected成員,只允許子類成員訪問;
  (1) 基類成員對其對象的可見性:

  公有成員可見,其他不可見。這里保護成員同於私有成員。

  (2) 基類成員對派生類的可見性:

  公有成員和保護成員可見,而私有成員不可見。這里保護成員同於公有成員。

  (3) 基類成員對派生類對象的可見性:

  公有成員可見,其他成員不可見。

  所以,在公有繼承時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這里,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。

  對於私有繼承方式:
  (1)父類的public成員成為子類的private成員,只允許子類成員訪問
  (2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
  (3)父類的protected成員成為子類的private成員,只允許子類成員訪問;

  (1) 基類成員對其對象的可見性:

  公有成員可見,其他成員不可見。

  (2) 基類成員對派生類的可見性:

  公有成員和保護成員是可見的,而私有成員是不可見的。

  (3) 基類成員對派生類對象的可見性:

  所有成員都是不可見的。

  所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。

  對於保護繼承方式:
  
(1)父類的public成員成為子類的protected成員,只允許子類成員訪問
  (2)父類的private成員仍舊是父類的private成員,子類成員不可以訪問這些成員;
  (3)父類的public成員成為子類的protected成員,只允許子類成員訪問;

  這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。

  上述所說的可見性也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱派生類的對象對基類訪問為水平訪問,稱派生類的派生類對基類的訪問為垂直訪問。

  一般規則如下

  公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制;
  私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;
  保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私有繼承。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM