Item23:宁以non-member,non-friend替换member函数
芝士wa
2024.4.7
引例,想象有个class用来表示网页浏览器。这样的class可能提供的众多函数中,有一些用来清除的函数,
class WebBrower{
public:
...
void clearCache();
void clearHistory();
void removeCookies();
void clearEverything();
...
};
void WebBrower::clearEverything(){
clearCache();
clearHistory();
removeCookies();
}
clearEverything函数也可以作为非成员函数实现,
void clearEverything(WebBrower &b)
{
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
}
第二种实现方式,即非成员函数更好!
Why?
从封装的角度考虑,成员函数不仅可以访问对应的private数据,还可以访问其他private数据,enums,typedefs等等,而非成员函数无法访问这些,因此非成员函数提供了更大的封装性!
这里的非成员函数也可以是其他类的成员函数。
在C++中,更自然的做法是让clearEverything成为一个非成员函数并且位于WebBrower类所在的同一个namespace内:
namespace WebBrowerStuff{
class WebBrowerStuff{};
void clearBrowser(WebBrower &b);
}
宁可用non-member,non-friend函数替换member函数,这样做可以增加封装性、包裹弹性和机能扩充性。
本文来自博客园,作者:芝士wa,转载请注明原文链接:https://www.cnblogs.com/cheese-wa/p/18119420

浙公网安备 33010602011771号