Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
Возьмем класс для представления Web-браузера. В числе прочих такой класс может предлагать функции, который очищают кэш загруженных элементов, очищают историю посещенных URL и удаляют из системы все «куки» (cookies):
class WebBrowser {
public:
…
void clearCache();
void clearHistory();
void removeCookies();
…
};Найдутся пользователи, которые захотят выполнить все эти действия вместе, поэтому WebBrowser может также предоставить функцию и для этой цели:
class WebBrowser {
public:
…
void clearEveryThing(); // вызывает clearCache(), clearHistory()
// и removeCookies()
…
};Конечно, такая функциональность может быть обеспечена также функцией, не являющейся членом класса, которая вызовет соответствующие функции-члены:
void clearBrowser(WebBrowser& wb)
{
wb.clearCache();
wb.clearHistory();
wb.removeCache();
}