一、将成员变量声明为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(侯捷译)