我們已經接觸了C++的兩個關鍵字:public和private。public是公開的,而private是私有的。
在C++的類中,如果一個屬性或方法被定義為public,那么這個屬性或者方法可以被所有的類訪問。如果一個屬性或方法被定義為private,那么這個屬性或者方法只能夠被自己這個類訪問,甚至子類也無法訪問。
那么問題來了,子類如果每次訪問父類的屬性都要使用getter或setter方法,那么會很不方便。而且如果父類不提供getter和setter方法的話,那就沒有辦法訪問了。如果我們想子類直接訪問父類的屬性或者方法,那么可以使用protected關鍵字。
它的使用方法和其他兩個關鍵字一樣:
class ClassName { public: //public attributes or methods protected: //protected attributes or methods private: //private attributes or methods };
這樣一來,子類就可以直接訪問父類的屬性或方法而其他與父類無關的類無法直接訪問。
所以我們也可以得知訪問權限級別的順序:public > protected > private
在繼承中的public、private和protected
|
父類成員訪問級別 |
|||
繼 承 方 式 |
|
public |
proteced |
private |
public |
public |
proteced |
private |
|
proteced |
proteced |
proteced |
private |
|
private |
private |
private |
Private |
也就是說,當繼承時,我們的格式是:
class ClassA: public ClassB { //... };
那么ClassA中的所有屬性和方法的訪問權限和父類相同。
如果我們在繼承時使用了protected:
class ClassA: protected ClassB { //... };
那么ClassB中的public屬性或者方法的訪問權限就會變為protected,而其他的權限不變。
如果我們在繼承時使用了private:
class ClassA: private ClassB { //... };
那么ClassB中的所有屬性或者方法的訪問權限就會變為private。