本文的前提是使用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...