將成員變數宣告為private和用非成員、非友友提高封裝性(Effective C++_22、23))
阿新 • • 發佈:2019-02-05
一、將成員變數宣告為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(侯捷譯)