将成员变量声明为private和用非成员、非友友提高封装性(Effective C++_22、23))

来源:互联网 发布:游戏截图软件fraps 编辑:程序博客网 时间:2024/06/05 00:58

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

0 0