C++中的成員分爲三種類型:公有成員,私有成員,保護成員。
若是不特別指定,類裏全部的成員都是公有(Public)的,不用特意聲明。可是私有(Private)成員則是要必定聲明的。 shell
這三種類型才成員的區別在於,對於本類來講:
公有成員,外部能夠訪問的成員。
私有成員,外部不能夠訪問的成員。
保護成員,外部不能夠訪問的成員。 函數
乍看起來,私有成員與保護成員的訪問權限是相同的,使用私有成員就好了,貌似沒有必要再多出來一個保護成員。
咱們要相信,咱們以爲本身挺明白,弄出C++的大牛比咱們還明白,他們固然知道哪些是須要的哪些是沒用的,若是保護成員沒有用處,還會出如今C++中嗎?
實際上,保護成員與私有成員的區別體如今繼承上。 spa
繼承分爲:公有繼承,私有繼承,保護繼承。
公有繼承,基類的公有成員和保護成員做爲派生類的公有成員,外部能夠訪問;
私有繼承,基類的公有成員和保護成員做爲派生類的私有成員,外部不能夠訪問;
保護繼承,基類的公有成員和保護成員做爲派生類的保護成員,外部不能夠訪問; 對象
這三種繼承中,派生類都不能訪問基類的私有成員。
從繼承中,咱們能夠看出,保護成員和私有成員有本質上的區別。
固然,也能夠說在繼承中,保護成員和公有成員沒什麼區別。 繼承
能夠看出,保護成員就是夾在私有成員和公有成員間的一個第三者,說是第三者可能不太合適,應該是一夫二妻裏的老公,兩邊他都有關係,可是本質上他又和兩邊都不一樣(他是男的。。。) 權限
經過以上的說明咱們也能夠看出,保護成員的做用主要是在繼承時才體現出來的。 co
可能有好事者又要問,那私有繼承和保護繼承有什麼區別,繼承來的成員都是外部不能訪問的啊?對於這個問題,繼承一次好辦,確實沒區別,可是若是再從派生類派生出派生類2,那就有區別了,由於私有成員是不能被再派生出來的派生類2訪問的。 background
C++中的繼承方式有:
public、private、protected三種(它們直接影響到派生類的成員、及其對象對基類成員訪問的規則)。