c ++ глобальные функции и ООП? - PullRequest
4 голосов
/ 04 июня 2010

В C ++ можно иметь «ГЛОБАЛЬНУЮ ФУНКЦИЮ», что означает, что она не принадлежит ни одному классу. Я задавался вопросом, не является ли это просто нарушением основных принципов ООП?

Какая разница с использованием глобальной функции или функции, которая является статической в ​​классе? Я думаю, что последний более ориентирован на ООП. Но я могу ошибаться, однако ...

Разве это не усложняет процесс написания многопоточного приложения?

Ответы [ 4 ]

8 голосов
/ 04 июня 2010

Статическая функция внутри класса такая же ОО, как и глобальная функция внутри модуля. Дело в JAVA, у вас нет выбора.

В C ++ вы можете инкапсулировать свои глобальные функции в пространствах имен, для этого вам не нужен фиктивный класс. Таким образом, у вас есть модульность.

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

Также в C ++ у вас есть много вариантов иметь «глобальную» функцию, которая фактически связана с классом, как операторные функции, которые могут быть, например, друзьями класса.

EDIT Что касается многопоточности, вам нужно беспокоиться о глобальных переменных, а не о функциях.

2 голосов
/ 04 июня 2010

C ++ облегчает многие парадигмы программирования: структурированный, ООП, функциональный.

Нет смысла выбирать ОО-подход для небольшой программы (привет, как в мире).

Нет смысла использовать структурированный подход для модульной программы.

Кроме того, статические функции классов просто лучше организованы, чем «свободные» функции; Кроме того, у них есть доступ к закрытым переменным объекта - улучшенная инкапсуляция.

1 голос
/ 04 июня 2010

Полностью согласен с другими ответами и хочу добавить свой совет. Статические функции и статические методы - это почти одно и то же, и злоупотребление ими может привести к плохому дизайну. Если вы хотите сохранить свою объектную модель в чистоте, вы должны использовать статические функции / методы, только если:

  • они не дают результата, который зависит от состояния объекта
  • они не меняют состояние объекта
1 голос
/ 04 июня 2010

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

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

И, честно говоря, действительно ли имеет значение, печатаете ли вы std::Math::max или std::max?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...