此問題標題取自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()'來調用它)。 –