Подтвердить что ты не робот

Функции членов С++ vs Свободные функции

Я постоянно путаюсь в этом решении по дизайну много раз, когда я пишу программы, но я не уверен на 100%, когда я должен сделать функцию функцией-членом класса, когда выходить это как обычная функция, в которой другие исходные файлы могут вызывать функцию, когда объявление функции отображается в файле заголовка. Требуется ли доступ к переменным-членам-членам функции в большинстве случаев? Спасибо заранее.

4b9b3361

Ответ 1

Принцип интерфейса от Herb Sutter

Для класса X все функции, включая свободные функции, (a) "упомянуть" X и
(b) "поставляются с" X логически являются частью X, потому что они составляют часть интерфейса X.

Для углубленного обсуждения прочитайте Пространства имен и принцип интерфейса Herb Sutter.

ИЗМЕНИТЬ
На самом деле, если вы хотите понять С++, и прочитайте все, что написал Herb Sutter:)

Ответ 2

Я использую классы, когда мне нужно поддерживать состояние. Если функции не требуется доступ к поддерживаемой информации о состоянии, я предпочитаю бесплатную функцию, потому что она облегчает тестирование и повторное использование кода.

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

Ответ 3

Если что-то требует доступа к переменным-членам или некоторому аспекту экземпляра объекта, тогда его следует сделать методом.

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

Даже если это всего лишь общая функция, есть вероятность, что у вас будет более одного из них и что они могут быть агрегированы/организованы в соответствии с определенной концепцией. Затем вы можете создать класс, представляющий эту концепцию, и сделать их совместными функциями.

Учитывая вышеизложенное, я больше не вижу причин создавать автономные функции.