C 類中的訪問許可權問題

2021-06-07 05:47:27 字數 4153 閱讀 6632

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.其友元函式...