Статические функции-члены класса являются просто обычными (нечленными) функциями. Вы знаете, какие обычные функции полезны, не так ли? Таким образом, статические функции-члены хороши для одних и тех же вещей по тем же причинам.
Это просто, что иногда обычная функция тесно связана с классом, поэтому имеет смысл объявить ее как статический член класса, вместо того, чтобы объявлять ее как полностью независимую автономную функцию. Это помогает вам выразить тот факт, что функция тесно связана с классом. Кроме того, это дает этой функции полный доступ ко всем внутренним частям класса - к ее частным и защищенным членам.
Последний фактически позволяет реализовать некоторые полезные идиомы программирования и шаблоны, используя статическую функцию-член. Сделайте поиск, например, для идиомы «статический конструктор».
Но статическая функция не имеет доступа к частным и защищенным членам, не так ли? Он имеет доступ только к другим статическим данным в классе? Я прав? – bodacydo
@bodacydo: Не совсем. Статическая функция может обращаться к частным и защищенным членам класса, когда/if дано указатель на экземпляр этого стекла. Какая статическая функция не имеет, это неявный параметр 'this', поэтому, если вам нужен экземпляр класса для доступа, вы сами должны явно передать его функции. – AnT
Нет, ты не прав. Если у вас есть класс 'A' со статическим методом' s() 'и private member' p', экземпляр pass-in позволяет 's()' обращаться к 'p'. Или 's()' может создавать экземпляры 'A' и заполнять' p'. Такого рода вещи. –