Я постоянно путаюсь в этом решении по дизайну много раз, когда я пишу программы, но я не уверен на 100%, когда я должен сделать функцию функцией-членом класса, когда выходить это как обычная функция, в которой другие исходные файлы могут вызывать функцию, когда объявление функции отображается в файле заголовка. Требуется ли доступ к переменным-членам-членам функции в большинстве случаев? Спасибо заранее.
Функции членов С++ vs Свободные функции
Ответ 1
Принцип интерфейса от Herb Sutter
Для класса X все функции, включая свободные функции,
(a) "упомянуть" X и
(b) "поставляются с" X
логически являются частью X, потому что они составляют часть интерфейса X.
Для углубленного обсуждения прочитайте Пространства имен и принцип интерфейса Herb Sutter.
ИЗМЕНИТЬ
На самом деле, если вы хотите понять С++, и прочитайте все, что написал Herb Sutter:)
Ответ 2
Я использую классы, когда мне нужно поддерживать состояние. Если функции не требуется доступ к поддерживаемой информации о состоянии, я предпочитаю бесплатную функцию, потому что она облегчает тестирование и повторное использование кода.
Если у меня есть связанная функциональность, но мне не нужно поддерживать состояние, я предпочитаю помещать свободные функции в пространство имен.
Ответ 3
Если что-то требует доступа к переменным-членам или некоторому аспекту экземпляра объекта, тогда его следует сделать методом.
Если он тесно связан с классом, но ему не нужно обращаться к какой-либо конкретной информации о конкретном экземпляре, тогда его следует использовать совместно используемую функцию (или функцию класса или статическую функцию в зависимости от того, на каком языке программирования вы имеете дело).
Даже если это всего лишь общая функция, есть вероятность, что у вас будет более одного из них и что они могут быть агрегированы/организованы в соответствии с определенной концепцией. Затем вы можете создать класс, представляющий эту концепцию, и сделать их совместными функциями.
Учитывая вышеизложенное, я больше не вижу причин создавать автономные функции.