【C++】public protected private

第一:private, public, protected 訪問標號的訪問範圍。

private:只能由1.該類中的函數、2.其友元函數訪問。

不能被任何其他訪問,該類的對象也不能訪問。


protected
:可以被1.該類中的函數、2.子類的函數、以及3.其友元函數訪問。

但不能被該類的對象訪問。


public
:可以被1.該類中的函數、2.子類的函數、3.其友元函數訪問,也可以由4.該類的對象訪問。

 

注:友元函數包括3種:設爲友元的普通的非成員函數;設爲友元的其他類的成員函數;設爲友元類中的所有成員函數。

第二:類的繼承後方法屬性變化。

private 屬性不能夠被繼承。
使用private繼承,父類的protectedpublic屬性在子類中變爲private
使用protected繼承,父類的protectedpublic屬性在子類中變爲protected
使用public繼承,父類中的protectedpublic屬性不發生改變;

 

如下所示:

                                public:           protected:       private:
public
繼承           public             protected        不可用 
protected
繼承      protected      protected        不可用 
private
繼承           private          private            不可用


protected
繼承和private繼承能降低訪問權限。

爲了進一步理解三種不同的繼續方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。
  對於公有繼續方式:
(1) 基類成員對其對象的可見性:
  公有成員可見,其他不可見。這裏保護成員同於私有成員。
(2) 基類成員對派生類的可見性:
  公有成員和保護成員可見,而私有成員不可見。這裏保護成員同於公有成員。
(3) 基類成員對派生類對象的可見性:
  公有成員可見,其他成員不可見。
  所以,在公有繼續時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這裏,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。
  對於私有繼續方式:
(1) 基類成員對其對象的可見性:
  公有成員可見,其他成員不可見。
(2) 基類成員對派生類的可見性:
  公有成員和保護成員是可見的,而私有成員是不可見的。
(3) 基類成員對派生類對象的可見性:
  所有成員都是不可見的。
  所以,在私有繼續時,基類的成員只能由直接派生類訪問,而無法再往下繼續。
  對於保護繼續方式:
  這種繼續方式與私有繼續方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。
  上述所說的可見性也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱派生類的對象對基類訪問爲水平訪問,稱派生類的派生類對基類的訪問爲垂直訪問。
  一般規則如下:
  公有繼續時,水平訪問和垂直訪問對基類中的公有成員不受限制;
  私有繼續時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;
  保護繼續時,對於垂直訪問同於公有繼續,對於水平訪問同於私有繼續。
  對於基類中的私有成員,只能被基類中的成員函數和友元函數所訪問,不能被其他的函數訪問。
  基類與派生類的關係
  任何一個類都可以派生出一個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。
  基類與派生類之間的關係可以有如下幾種描述:
1. 派生類是基類的具體化
  類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若干個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特徵,而派生類通過增加行爲將抽象類變爲某種有用的類型。
2. 派生類是基類定義的延續
  先定義一個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函數就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。
3. 派生類是基類的組合
  在多繼續時,一個派生類有多於一個的基類,這時派生類將是所有基類行爲的組合。
  派生類將其本身與基類區別開來的方法是添加數據成員和成員函數。因此,繼續的機制將使得在創建新類時,只需說明新類與已有類的區別,從而大量原有的程序代碼都可以複用,所以有人稱類是可複用的軟件構件

 

//其他補充:

1.關於設計模式;

2.命名空間的使用;

3.類(對象)的包含與private繼承的區別與優缺點;

4.private,protectedpublic繼承在何種情況下使用;

5.還是設計模式:UI層、邏輯層(交互層,承上啓下,對象實體)、數據處理層(數據庫等);

6.多態(虛函數、純虛函數、STLboost);

7.面向對象的思想;

8.還是設計模式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章