C++ 宣告 data members 為 private
應將 member data 宣告為 private,以 public member function 存取 member data。如此可透過 member function 做細微的 access control,例如以只有 get function 沒有 set function 實作 read-only 的性質。
將 member data 宣告為 private 也提升它的封裝性。一個元件的封裝性跟其內容改變時需修改的 code 量成反比,需修改的 code 越多表示封裝性越低。例如修改一 member data 的名稱時,需要檢查所有 code?還是繼承架構中的 code?還是該 class 的 code?
要注意在 class 提供外界使用並可供繼承時(如 framework、library 的 class),protected 不比 public 來得更有封裝性,兩者幾乎不相上下。雖然 protected member data 的使用範圍僅限於繼承體系,但由於公開給他人使用,使用該 member 的 code 數量跟直接 public 給他人使用沒什麼區別。(就是都很多啦!)
Ref
- 《Effective C++》item 22 Declare data members private