Я часто пишу геттеры и сеттеры только потому, что для получения и настройки потребуется другой уровень доступа.И эти методы получения и установки являются тривиальными (метод получения только возвращает, метод установки только устанавливает значение, никакого другого кода внутри).Типичный случай, когда вы хотите, чтобы значение поля было только для чтения для внешнего мира (и вы пишете целый набор функций-получателей для каждого поля.)
Методы получения и установки - это скрытые функции.И вызов функции на медленнее , чем просто установка поля, потому что вам нужно скопировать аргументы, выдвинуть и вытолкнуть кадр стека, скопировать результат и т. Д.
Что ж, компиляторы могут оптимизироватьвызов функции и встроенное назначение, но это то, что вы не можете контролировать.Даже встроенное ключевое слово в c ++ является лишь подсказкой, и компиляторы могут его игнорировать.Вы должны предположить, что функция вызывается, и она будет медленнее.
Более того, никогда языки (например, C #) не поддерживают свойства и не имитируют эту вещь, но они представляют собой не что иное, как функции, которые выглядят как поле, вы дажескажем, что это функция или поле (без помощи IDE).
Какие проблемы могут возникнуть, если мы можем установить разные модификаторы доступа для записи и чтения (как, например, файловые системы), кроме простосказать, что это нарушит догматический принцип инкапсуляции?