Effective C++ 条款23:宁以non-member、non-friend替换member函数
时间:2021-07-05 18:37:48
收藏:0
阅读:0
考虑下面这个列子,我们定义了一个浏览器类。现在我们希望清理这个浏览器,一共需要清理三个东西,所以有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放在类里面,那么这个方法就完全能够访问私有成员。即使这个方法没有访问,但依然会增加访问私有成员的可能性。
而放在普通函数里,就不然不可能访问私有成员,也一定不会增加访问私有成员的可能。
评论(0)