2012-05-31 19:48:21
| 分類:
c++基礎的東東
| 標籤:|字型大小
大中小訂閱
c++中public,protected,private訪問小結
第一:private,public,protected方法的訪問範圍.(public繼承下)
private: 只能由該類中的函式、其友元函式訪問,不能被任何其他訪問,該類的物件也不能訪問.
protected: 可以被該類中的函式、子類的函式、以及其友元函式訪問,但不能被該類的物件訪問
public: 可以被該類中的函式、子類的函式、其友元函式訪問,也可以由該類的物件訪問
注:友元函式包括兩種:設為友元的全域性函式,設為友元類中的成員函式
第二:類的繼承後方法屬性變化:
使用private繼承,父類的所有方法在子類中變為private;
使用protected繼承,父類的protected和public方法在子類中均變為protected;而private方法不變;
使用public繼承,父類中的方法屬性不發生改變;
public:
protected:
private:
public繼承
public
protected
---protected
繼承protected
protected
---private繼承
private
private
---
注意(結論):protected繼承和private繼承能降低訪問許可權(....使得函式更難以訪問)
第三:總結的東東:
也就是說:(總結如下)
a.一般類的成員訪問許可權
1.在類體內無訪問限制(一說)--任意訪問
即private函式可以訪問任意public/protected/private的成員函式或資料成員;
同理protected函式\public函式也可以任意訪問該類體中定義的成員變數及函式
2.在類體外有訪問限制(一說)
即類外無法訪問protected/private型別的成員變數///函式!!!!!
b.(派生)類(子類)的成員訪問許可權
3.在類的繼承中,成員的訪問許可權會有所變化,
(1).如在public繼承下,
a.對於父類來說,類內訪問仍然按類內的無限制訪問1.及類外訪問2.)---僅僅看作是一般的類
b.基類中的public/protected/private成員繼承為該子類的public/protected/private成員
對於派生的子類來說,將自己定義的各種許可權的成員變數/函式和從父類繼承來的成員變數/函式一起看做自己的新成員....
同理於1和2,在該派生類(子類)的內部無訪問許可權控制--任意訪問..........(注意:父類的private不可訪問!!!!)
在該派生類(子類)的外部有訪問許可權控制,無法訪問protected/private成員
(2).如在protected繼承下,
a.對於父類來說,類內訪問仍然按類內的無限制訪問1.及類外訪問2.)---僅僅看作是一般的類
b.基類中的public/protected/private成員繼承為該子類的protected/protected/private成員
對於派生的子類來說,將自己定義的各種許可權的成員變數/函式和從父類繼承來的成員變數/函式一起看做自己的新成員....
同理於1和2,在該派生類(子類)的內部無訪問許可權控制--任意訪問..........(注意:父類的private不可訪問!!!!)
在該派生類(子類)的外部有訪問許可權控制,無法訪問現有的(新成員)protected/private成員
(事實上對應的是其父類的public/protected/private)
(3).如在private繼承下,
a.對於父類來說,類內訪問仍然按類內的無限制訪問1.及類外訪問2.)---僅僅看作是一般的類
b.基類中的public/protected/private成員繼承為該子類的private/private/private成員
對於派生的子類來說,將自己定義的各種許可權的成員變數/函式和從父類繼承來的成員變數/函式一起看做自己的新成員....
同理於1和2,在該派生類(子類)的內部無訪問許可權控制--任意訪問..........(注意:父類的private不可訪問!!!!)
在該派生類(子類)的外部有訪問許可權控制,無法訪問protected/private成員
(事實上對應的是其父類的public/protected/private)
第四:進一步的總結
a.在無繼承的情況下,
類內部可以隨意訪問,即使是private
;類外部無法訪問protected/private成員 .
b.在有繼承的情況下,
(先確定類繼承方式,
再確定繼承後子類的新成員屬性,
最後確定子類內部/外部的訪問許可權:!!!此時即使是在子類的內部也不能訪問父類的private
)
1.若是public繼承的話,父類的public/protected/private屬性繼承到子類時,均不會變化(新成員)
在子類內部訪問時,無法訪問父類的private(對比:在無繼承時,類內可隨便訪問)
在子類外部訪問時,無法訪問子類的新成員protected/private
2.若是protected繼承的話,父類的public/protected/private屬性繼承到子類時,會變化為(新成員)protected/protected/private
在子類內部訪問時,無法訪問父類的private(對比:在無繼承時,類內可隨便訪問)
在子類外部訪問時,無法訪問子類的新成員protected/private
3.若是protected繼承的話,父類的public/protected/private屬性繼承到子類時,會變化為(新成員)private/private/private
在子類內部訪問時,無法訪問父類的private(對比:在無繼承時,類內可隨便訪問)
在子類外部訪問時,無法訪問子類的新成員protected/private
第五:保護繼承與私有繼承
從上面的結果來看,私有繼承和保護繼承作用完全一樣。仔細一想其實還是有區別,區別是如果派生類再一次去派生其它類時,對於剛才的私有繼承來說,再派生的類將得不到任何成員。而對於剛才的保護繼承,仍能夠得到基類的公有和保護成員。
a類(基類)
b類(a的派生類)
c類(b的派生類)
公有繼承
公有成員
公有成員
公有成員
私有成員
(無)(無)
保護成員
保護成員
保護成員
私有繼承
公有成員
私有成員
(無)私有成員
(無)(無)
保護成員
私有成員
(無)保護繼承
公有成員
保護成員
保護成員
私有成員
(無)(無)
保護成員
保護成員
保護成員
C 類中的訪問許可權問題
2012 05 31 19 48 21 分類 c 基礎的東東 標籤 字型大小 大中小訂閱 c 中public,protected,private訪問小結 第一 private,public,protected方法的訪問範圍.public繼承下 private 只能由該類中的函式 其友元函式訪問,不能...
C 類的訪問許可權問題
為了更加方便的記憶,還是梳理下這些老掉牙的關係,這樣也更加深刻。c 中public,protected,private訪問小結 第一 private,public,protected方法的訪問範圍.public繼承下 private 只能由該類中的函式 其友元函式訪問,不能被任何其他訪問,該類的物件...
C 中類訪問許可權控制
c 中類訪問許可權控制 第一 private,public,protected 訪問標號的訪問範圍,在沒有繼承的情況下 private 只能由1.該類中的函式 2.其友元函式訪問。不能被任何其他訪問,該類的物件也不能訪問。protected 可以被1.該類中的函式 2.子類的函式 以及3.其友元函式...