首页 > 代码库 > [023]宁以non-member、non-friend替换member函数
[023]宁以non-member、non-friend替换member函数
作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member、non-friend函数。
思路如下:
场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义下面的类:
class Web {public: void clearCache(); void clearCookies(); void clearHistory();}
但是也有可能用户需要一下子全部清除这些信息,于是我们再定义下面这个成员函数:
class Web {
public: void clearEverything();.....}
当然,我们可以使用一个non-member函数来完成这个操作:
void clear (Web& wb) { wb.clearCache(); wb.clearCookies(); wb.clearHistory();}
根据面向对象守则要求,数据以及操作数组的那些函数应该被捆绑在一块。虽然这么说,但是针对clear操作而言,non-member函数clear()具有更大的封装性。
因此,我们推荐使用non-member函数。
而在实际操作中,在class拥有很多操作函数的时候,我们经常是将class成为一个non-member函数并且位于web所在的同一个namespace内。比如:
1 // 头文件“web.h” 2 namespace Web{ 3 class Web{}; 4 .... // 放入核心机能,例如几乎客户需要的所有non-member函数 5 6 } 7 8 // 头文件“webbrowser.h” 9 namespace Web{10 class Web{};11 .... // 与浏览器标签相关的函数12 13 }14 15 // 头文件“webcookies.h”16 namespace Web{17 class Web{};18 .... // 与Cookies相关的函数19 20 }
上述正式C++标准程序库的组织方式。
◆总结
宁以non-member、non-friend替换member函数。这样做可以增加封装性、包裹弹性和机能扩充性。
[023]宁以non-member、non-friend替换member函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。