Каковы наиболее распространенные виды использования статических функций класса в C ++? - PullRequest
2 голосов
/ 05 июля 2010

Сегодня я изучаю статические функции классов в C ++ и не могу понять, для чего они хороши?У кого-нибудь есть хорошие примеры, где их можно успешно применить?

Спасибо, Бода Цидо.

Ответы [ 4 ]

5 голосов
/ 05 июля 2010

Статические функции-члены класса являются просто обычными (не-членами) функциями. Вы знаете, для чего хороши обычные функции? Итак, статические функции-члены хороши для одних и тех же вещей по тем же причинам.

Просто обычная функция иногда тесно связана с классом, поэтому имеет смысл объявить ее как статический член класса, а не объявлять ее как полностью независимую автономную функцию. Это поможет вам выразить тот факт, что функция тесно связана с классом. Кроме того, это дает этой функции полные права доступа к внутренностям класса - его частным и защищенным членам.

Последнее фактически позволяет реализовать некоторые полезные идиомы программирования и шаблоны с использованием статической функции-члена. Выполните поиск, например, для выражения "статический конструктор".

0 голосов
/ 05 июля 2010

Статические функции-члены могут использоваться для выполнения нетривиальной инициализации на статических, постоянных элементах данных.Например, у вас может быть статический, постоянный контейнер, который вы используете в каком-то классе.Статическая функция-член может использоваться для создания экземпляра контейнера, который возвращается и копируется в статический постоянный элемент данных.

0 голосов
/ 05 июля 2010

Думайте «глобально».Нестатическая функция, которую вы изучаете, работает с одним объектом, тогда как статическая функция является общей для всех объектов класса - так что ... что общего у всех этих объектов?в зависимости от вашего класса, но подумайте о «сводной информации».Подумайте о данных.Подумайте, что является общим для всех предметов класса.Может быть, у каждого есть промежуточный итог, специфичный для него самого, но вы также хотите получить общий итог?Думайте в том же духе ...

0 голосов
/ 05 июля 2010

Статические классы похожи на пространства имен, но они предлагают защиту (защищенную и приватную) и могут быть превращены в шаблоны (да, голые функции тоже могут, но у них есть ограничения, которые иногда делают шаблон класса-оболочки более простым или даже необходимым) .

...