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