1. 程式人生 > >將成員變數宣告為private和用非成員、非友友提高封裝性(Effective C++_22、23))

將成員變數宣告為private和用非成員、非友友提高封裝性(Effective C++_22、23))

一、將成員變數宣告為private (條款22)
■ 切記將成員變數宣告為private.這可賦予客戶訪問資料的一致性,可細微劃分訪問控制,允諾約束條件獲得保證,
並提供class作者以充分的實現彈性.
■ protected並不比public更具封裝性.

二、寧以非成員、非友元函式替換成員函式(條款23)
(1)之所以這樣做,是為了減少能夠訪問private成員的程式碼的數量,以此來提高封裝性
(2)考慮下列問題,有一個class用來表示網頁瀏覽器:


 class WebBrowser {
 pbulic:
  ....
  void clearCache();    //清除下載快取記憶體區(cache of downloaded elements)
void clearHistory(); //清除訪問過的URLs的歷史記錄(history of visited URLs) void removeCookies(); //移除系統中的所有cookies .... };

許多使用者會想整個執行所有這些動作,因此需要提供一個函式,考慮提供一個member函式

 class WebBrowser {
 public:
  .....
  void clearEverything();
  .....
 };

也可以使用一個non-member函式

 void clearBrowser(WebBrowser& wb)
 {
  wb.clearCache
(); wb.clearHistory(); wb.removeCookies(); }

當越多的函式可訪問它,資料的封裝性就愈低。因此我們可以這樣來看對於一個class來說,如果member函式和一個non-member non-friend函式有相同的機能,那麼non-member non-friend函式有較大封裝性。因為它並不增加對class中的私有成員變數的訪問數量。

參考:Effective C++ 3rd(侯捷譯)