相关疑难解决方法(0)

我应该何时更喜欢非会员非朋友功能到会员功能?

Meyers在他的书"Effective C++"中提到,在某些情况下,非成员非朋友函数比成员函数更好地封装.

例:

// Web browser allows to clear something
class WebBrowser {
public:
  ...
  void clearCache();
  void clearHistory();
  void removeCookies();
  ...
};
Run Code Online (Sandbox Code Playgroud)

许多用户希望一起执行所有这些操作,因此WebBrowser也可能提供一个功能:

class WebBrowser {
public:
  ...
  void clearEverything();  // calls clearCache, clearHistory, removeCookies
  ...
};
Run Code Online (Sandbox Code Playgroud)

另一种方法是定义非成员非朋友函数.

void clearBrowser(WebBrowser& wb)
{
  wb.clearCache();
  wb.clearHistory();
  wb.removeCookies();
}
Run Code Online (Sandbox Code Playgroud)

非成员函数更好,因为"它不会增加可以访问类的私有部分的函数的数量.",从而导致更好的封装.

喜欢的功能clearBrowser方便的功能,因为他们不能提供任何功能的WebBrowser一些其他方式的客户端无法获得已.例如,如果clearBrowser不存在,客户可以只打电话clearCache,clearHistoryremoveCookies他们自己.

对我而言,便利功能的例子是合理的.但是当非会员版本擅长时,除了便利功能之外还有其他例子吗?

更一般地说,什么时候使用哪些规则

c++ encapsulation

17
推荐指数
1
解决办法
2449
查看次数

标签 统计

c++ ×1

encapsulation ×1