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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值