1. 程式人生 > >個人理解:什麼情況下需要使用protected修飾類成員變數

個人理解:什麼情況下需要使用protected修飾類成員變數

    在自己編寫程式碼或者閱讀別人的程式碼時,我們經常會遇到類的訪問限制符public,private,protected。對於前兩個public和private的使用我們很好理解:

  1. 類成員變數一般修飾為private,防止類使用者不受約束地直接修改資料;
  2. 類成員函式一般修飾為public,提供給使用者進行呼叫;
  3. 某些類成員函式有時候也修飾為private,方便類內的成員函式在實現某些稍微複雜的功能是去呼叫,而對於類的使用者,無需瞭解到類內的方法是如何實現的。
    那麼問題來了,protected在什麼情況下使用呢?     說到protected,就不得不提到C++面向物件的一大特性:繼承。如果沒有繼承這個機制,也就無需有protected存在的意義。如果一個類用protected修飾其成員變數或者函式,那麼這個類的子類可以擁有訪問這個成員變數或者函式的權利,而其他類仍然像private的限制一樣無法訪問這個類的protected成員。
    這樣,重點來了。我認為,protected用在這樣一個場合:用protected修飾的成員一般具有很高的而且相對基礎使用價值。也就是說,其他類內的成員函式在實現自己功能的時候,會使用到protected修飾的成員。那麼,具有這麼高的使用價值,這麼個寶貝,在繼承的時候,就應該提供給自己的子類。這也是對“繼承”的直觀理解。這樣,基類的子類在實現自己的成員函式或者重寫基類的成員函式的時候,就可以呼叫基類protected修飾的成員來使用。     但是,為什麼不直接把這樣的成員用public修飾呢?我想是因為為了保持類對外使用的簡潔性。類只要把自己的基本功能提供給使用者,至於這些功能的實現細節,是否用到了其他的函式,外界不需要知道也不能知道,只有自己的子類知道而且可以使用,因為它是繼承人。
    如果以後發現有其他的使用情景,再來更新。