注意事项:
1.将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允许约束条件获得保证,并提供clss作者以充分的弹性。(将成员变量隐藏在函数接口的背后,可以为“所有可能的实现”提供弹性;只读访问、读写访问函数;class约束条件获得维护,因为只有成员函数可以影响它们;)
2.protected并不比public更具封装性。
3.其实只有两种访问权限:private(提高封装)和其他(不提供封装)。
声明成员变量为private能保证只有class的member函数加上friend函数可以访问它们。因此,在一个member和一个non-member,non-friend函数都能提供相同函数功能的情况下,应该优先选用non-member,non-friend函数,因为它并不增加“能够访问class内之private成分”的函数数量,所以较好的维持了class的封装性。
例如,WebBrowser类中已经实现了清理缓存,历史记录以及cookies的操作,可以创建一个non-member,no-friend函数并且位于WebBrowser所在的同一个namespace内,即实现了用户可以扩展自定义的函数。
//WebBrowser.h namespace WebBrowserStuff{ class WebBrowser { public: WebBrowser(); ~WebBrowser(); void clearCache(); void clearHistory(); void removeCookies(); private: }; } —————————————————————————————————————————————— //WebBrowserClear.h namespace WebBrowserStuff{ class WebBrowser; void clearBrowser(WebBrowser& wb) { wb.clearCache(); wb.clearHistory(); wb.removeCookies(); } } //WebBrowserStuffs