C 訪問控制之protected

2021-07-10 04:53:15 字數 976 閱讀 6034

本文的前提是使用public繼承。

protected是修飾類成員的乙個關鍵字。其作用是使protected類成員不能夠從類外部訪問,在基類中,其與private的成員可看作具有相同的訪問限制,即只能被該基類的成員函式訪問。而protected成員還有乙個特點就是,通過public繼承得到的子類,其成員函式能夠直接訪問基類的protected成員,與此不同的是,子類需要通過繼承得來的public成員函式來訪問父類的private成員,而不能直接訪問。

來看個例子:

class father

;father::father()

father::father(const string & n, int a)

class son : public father

;son::son()

son::son(const string & h, const string & n, int a) : father(n, a) // 呼叫父類建構函式

上面的**能夠通過編譯,說明name能夠被子類直接訪問(son類的預設建構函式直接訪問),也能夠被間接訪問(son類的第二個建構函式通過呼叫父類建構函式訪問)。

下面來測試不允許的訪問(只有一種):

不允許從外部訪問:

int main()

編譯錯誤資訊:

綜上,protected成員在public繼承中的訪問限制是很明顯的:能被基類和子類直接訪問,但不能被外界直接訪問。

但是,不推薦使用protected,而推薦使用private,這樣能夠保證基類的成員及其一系列運作機制不被子類打亂,能夠使bug出現的機率更少。然而使用protected能夠使子類直接訪問父類的protected成員,使得對一些項的修改和呼叫一些父類的函式更加方便。

C 類繼承4 訪問控制protected

public和private來控制對類成員的訪問。還存在另外乙個訪問類別,這種類別用關鍵字protected表示。protected和private相似,在類外只能用公有類成員來訪問protected部分中的類成員。但是它們之間的區別體現在基類派生的類中。派生類的成員可以直接訪問基類的保護成員,但不...

訪問控制 protected 之 單元素模式設計

protected 在類外只能用公有類成員來訪問protected部分中的類成員。而派生類的成員可以直接訪問基類的protected成員。因此,對於外部世界來說,protected保護成員的行為與私有成員相似 但對於派生類來說,保護成員的行為與公有成員相似。最好對類資料成員採用私有訪問控制,而不要使...

C 的protected訪問修飾符

概述 設a為父類,b為繼承a的子類 在a中被protected修飾的成員 1 在a中可以訪問 2 在b中可以直接訪問 3 在b中通過b的例項訪問 4 在a和b的外部類無法訪問 總結 基類中訪問無限制 子類中直接訪問或通過子類例項訪問 示例 using system namespace testpro...