ФорумПрограммирование → Зачем нужные приватные методы класса?
2017-12-07 19:39:06
Я вместо приватных методов класса всегда делаю вот так:

static void func_proccess(std::vector<std::any> &data)
{
  foreach(item : data) {...}
}


class A
{
 std::vector<std::any> data;
 A() { func_proccess(data); }
};


Ну и у меня вопрос: а приватные методы класса для чего нужны, если и вот так вот можно «приватить» тоже?
Пока что вижу только одно приимущество приватных мемберов: для работы friend оператора, чтобы дружественные функции и классы могли вызывать приватные методы у объекта.
Ещё есть какие то причины, которые вынудят меня использовать приватные методы класса вместо статических вне класса?
2017-12-07 19:42:15
Майерс упоминает приватные типы данных. Но и их можно «заприватить» перенеся в безимянные неймпейс глобал видимости *.cpp-шника.

– qwe.cpp –

namespace
{
  class Point {...}
}


и всё, такой тип дданных будет запривачен.
2017-12-07 20:17:45
А зачем делать «через жопу», когда можно делать по-нормальному?
Ну и кроме просто адекватности «обычного» подхода, стоит добавить, что пространства имён в C++ появились далеко не сразу.
2017-12-07 21:53:01
static void func_proccess - это «через жопу»?
Майерс говорит, что такой способ улучшает инкапсуляцию.
дело в том, что статичная функция имеет доступ только к тем переменным, которые ей в параметрах передали. приватня же функция класса имеет доступ ко ВСЕМ данным класса.
2017-12-07 22:09:56
> дело в том, что статичная функция имеет доступ только к тем переменным, которые ей в параметрах передали
А ещё ко всем статическим переменным, объявленным до неё в том же пространстве имён. Так какая, к чёрту, разница?

> приватня же функция класса имеет доступ ко ВСЕМ данным класса.
Если у тебя так много приватных переменных, что сложно уследить за тем, как с ними обращаются функции, может следует как-то декомпозировать этот класс на классы помельче?
2017-12-08 23:57:39
если бы ты увидел такой вот код, со static void func_proccess - ты бы стал его исправлять, стал бы заниматься переносом этой функции внутрь класса?
2017-12-09 09:29:11
> если бы ты увидел такой вот код, со static void func_proccess - ты бы стал его исправлять, стал бы заниматься переносом этой функции внутрь класса?
Это большей частью зависит от контекста. Где и при каких условиях я её бы увидел. На работе по найму – нет.