您的位置:首页 > 博客中心 > 编程语言 >

Effective C++ 条款23:宁以non-member、non-friend替换member函数

时间:2022-03-29 01:54

考虑下面这个列子,我们定义了一个浏览器类。现在我们希望清理这个浏览器,一共需要清理三个东西,所以有3个成员变量。现在我们想将这三个东西放在一个函数里。有两种解决方法,一个是放在成员函数里,一个是放在普通函数里。哪个封装性更好?

class WebBrowser{
 public:
  void clearCache();
  void clearHistory();
  void removeCookies();

};

// 放在成员函数里
class WebBrowser {
 public:
  void clearEverything(){
    clearHistory();
    clearCache();
    removeCookies();
  }
};

// 放在普通函数里
void clearBrowser(WebBrowser& wb) {
  wb.clearCache();
  wb.clearHistory();
  wb.removeCookies();
}

答案是普通函数。封装的意图是让一部分代码对客户不可见,好处是我们可以可以随意修改这些代码,而客户完全不用管。

那如何衡量封装性呢?如果一个函数越少的访问私有成员,那么它的封装性就越好。因为在我们修改私有成员的时候,这些函数被修改的可能性就越低。

回到刚刚的例子,如果我们将clearEverything放在类里面,那么这个方法就完全能够访问私有成员。即使这个方法没有访问,但依然会增加访问私有成员的可能性。

而放在普通函数里,就不然不可能访问私有成员,也一定不会增加访问私有成员的可能。

本类排行

今日推荐

热门手游