Мейерс упомянул в своей книге "Эффективный C++", что в некоторых сценариях функции, отличные от членов, не являющиеся членами, лучше инкапсулируются, чем функции-члены.
Пример:
// Web browser allows to clear something
class WebBrowser {
public:
...
void clearCache();
void clearHistory();
void removeCookies();
...
};
Многие пользователи захотят выполнить все эти действия вместе, поэтому WebBrowser
может также предложить функцию, которая сделает именно это:
class WebBrowser {
public:
...
void clearEverything(); // calls clearCache, clearHistory, removeCookies
...
};
Другим способом является определение не-членной функции, отличной от друга.
void clearBrowser(WebBrowser& wb)
{
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
}
Функция, отличная от членов, лучше, потому что "она не увеличивает количество функций, которые могут обращаться к частным частям класса", что приводит к лучшей инкапсуляции.
Такие функции, как clearBrowser
, являются удобными функциями, потому что они не могут предлагать какие-либо функции, клиент WebBrowser
уже не мог получить какой-либо другой способ. Например, если clearBrowser
не существует, клиенты могут просто вызвать clearCache
, clearHistory
и removeCookies
сами.
Для меня пример удобных функций является разумным. Но есть ли какой-либо пример, отличный от удобства, когда отличная от него версия?
В более общем плане каковы правила использования