V>Какие преимущества:
V>- Не засоряется пространств имен класса. Private хоть и защищает от вызова снаружи, но участвует в перегрузке. Можно использовать короткие названия, понятные из контекста, во всех наследниках и не париться.
Не совсем Вас понял. Можете привести пример? Насколько я помню там работает так:
struct A {
int get() { return 1; }
};
struct B : A {
int get(int n) { return n; }
};
int main() {
B b;
return b.get(); // Тут ошибка компиляции
}
V>- Вызывая такую функцию, я полностью уверен что она не меняет инвариант класса. Т.е. на лицо меньшая связность, да еще и компилятор это проверит.
Ну она же не доступна наружу. Возможно это не надо?
V>- Реализация функции может требовать дополнительный инклюды, которые не нужны в публичном интерфейсе класса, что будет засорять пространство имен и, возможно, приводить к перекомпиляции.
Те функции, которые требуют дополнительные инклюды, я выделяю в отдельные cpp файлы. В итоге это снижает время компиляции, если я ничего не меняю эта часть функционала не перекомпилируется.
PCH>>Стоит ли игра свеч?
V>О каких свечах идет речь? Если что, писанины меньше, перекомпиляций тоже.
Не уверен что метод 3 занимает меньше писанины. Насчет перекомпиляция тоже вопрос. Вообще я стараюсь делать служебные функции static и невидимые в h — но они конечно не имеют доступа к private членам класса. Если он нужен и только в этом случае применяю private функции класса.