主要的理由还是封装。nonmember nonfreind function 不能访问类private 成员变量。
这个场景是有一个类提供了一些基本功能,比如
class WebBrowser { public: void clearCache(); void clearHistory(); void removeCookies(); };
有时候我们需要执行上述三个函数。我们的做法是
void clearBrowser(WebBrowerser &wb) { wb.clearCache(); wb.clearHistory(); wb.romoveCookies(); }
这样的好处是保持了WebBrowser的封装性。
//头文件webbrowser.h 针对webbrowser这个类本身。 //webbrowser的核心技能 namespace WebBrowerserStuff { class WebBrowser { public: void clearCache(); void clearHistory(); void removeCookies(); }; } //bookmark related functions //bookmark.h namespace WebBrowerserStuff { //bookmark related functions } //cookies related functions //cookies.h namespace WebBrowerserStuff { //cookies related functions }
这其实就像提供以一个不同方面的api list, 不用每次都include所有的h文件。
从封装的角度而言,有点疑问,就是为什么不提供一个二次封装的类,比如一个新类bookmark 来调用webbrowser的函数???
effective c++ 条款23 perfer nonmember nonfreind function to member function,布布扣,bubuko.com
effective c++ 条款23 perfer nonmember nonfreind function to member function