此问题标题取自Scott Meyers的Effective C++第3版中的项目#23的标题。他用下面的代码:将非会员非朋友函数加入到成员函数
class WebBrowser {
public:
void clearCache();
void clearHistory();
void removeCookies();
//This is the function in question.
void clearEverything();
};
//Alternative non-member implementation of clearEverything() member function.
void clearBrowser(WebBrowser& wb) {
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
};
虽然指出下面的替代非成员非友元函数是封装比成员函数clearEverything更好的()。我想这个想法的一部分是,如果有更少的成员函数提供访问权限,那么访问WebBrowser的内部成员数据的方法就会少一些。
如果您接受此功能并且创建此类外部非功能函数,您会将它们放在哪里?这些功能仍然与班级紧密相连,但他们不再是班级的一部分。将它们放在班级的相同CPP文件,库中的另一个文件中,或者放在什么地方是好习惯吗?我主要来自C#背景,而且我从未摆脱过对所有东西都渴望成为一个类的一部分的渴望,所以这使我感到有些困惑(虽然听起来很傻)。
如果您发现稍后需要它们,您可以随时将其添加到课程中,但无法删除它们。如果你不需要'clearEverything()'来访问类内部,就把它放在外面。如果让它访问内部变得很重要,那么为这个类编写一个成员函数(并且可以选择'clearEverything()'来调用它)。 –