码迷,mamicode.com
首页 > 其他好文 > 详细

条款23:宁以non-member, non-friend,替换member函数。

时间:2015-10-08 00:20:15      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

考虑下面这种经常出现的使用方式:

class webBroswer{
public:
    ...
    void clearCache();
    void clearHistory();
    void removeCookies();
    ...
};

那么很自然的就会想到增加这么一种清理方式:

class WebBrowser{
public:
    ...
    void clearEverything();
};

或者是这么一种清理方式:

void clearBrowser(WebBrowser & wb)
{
    wb.clearCache();
    wb.clearHistory();
    wb.clearCookie();
}
如果要在功能相同的一个member function和一个non-member, non-friend function之间选的话,那么具有较高的封装性的是non-member, non-friend function.
(注意这里的在意封装性,让一个function成为一个class的non-member),不影响其成为另一个class的member函数,例如上面的clearBrowser函数来说,其完全可以作为某个工具类的static member函数)
一般的好的做法是让,clearBrowser放置在与clss WebBrowser相同的一个namespace里面。像下面这样:
namespace WebBrowserStuff{
    class WebBrowser{...};
    void clearBrowser(WebBrowser & wb);//类似clearBrowser这类的便利函数可以在一个namespace里面声明多个。
};
而且由于namespace可以跨头文件存在,这样也方便这类的工具函数进行跨头文件的维护。
 
小结:
    记住应该用non-member non-friend函数替换member函数,这样做可以增加封装性,包裹弹性以及机能扩充性质。

条款23:宁以non-member, non-friend,替换member函数。

标签:

原文地址:http://www.cnblogs.com/-wang-cheng/p/4859716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!