本文主要是介绍条款23:宁以 non-member、non-friend 替换 member 函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
假设一个表示web浏览器的类:
class WebBrowser {
public:...void clearCache();void clearHistory();void removeCookies();void clearEverything(); // 调用clearCache,clearHistory,removeCookies
};
当然,这个也可以通过非成员函数调用适当的成员函数来提供:
void clearBrowser(WebBrowser& wb)
{wb.clearCache();wb.clearHistory();wb.removeCookies();
}
哪一个版本更好呢?
- 与直觉相反,成员函数clearverything实际上比非成员clearBrowser产生更少的封装。
- 没必要增加一个可以访问类中private成员的函数。
- 此外,非成员函数可以为WebBrowser相关的功能提供更大的打包灵活性,从而减少编译依赖,并提高WebBrowser的可扩展性。
- 这样更自然,并可以分布在不同的源文件中。可以减少编译依赖,客户也共更容易扩展。
可以把辅助函数和类放入同一个命名空间:
namespace WebBrowserStuff {class WebBrowser { ... };void clearBrowser(WebBrowser& wb);...
}
优先选择非成员非友元函数而不是成员函数。这样做可以提高封装性、打包灵活性和功能可扩展性。
这篇关于条款23:宁以 non-member、non-friend 替换 member 函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!