[C++] Спор: нужны ли константные поля?
всегда от его константности можно легко отказаться.Это смотря что именно ты вкладываешь в слово "легко". И что именно - в слово "концептуально".
У класса "Константный Прямоугольник" все поля концептуально должны быть константными - потому что он представляет собой константный прямоугольник. Тем не менее можно сделать их неконстантными но приватными, после чего проверить, что в них никогда ничего не присваивается - правда, я не понимаю, зачем проверять ручками то, что может проверить компилятор, и для чего придумано специальное служебное слово "const"?
Более того, класс "Константный Прямоугольник" может быть реализован как специальная обёртка над абстрактным классом "Базовый Прямоугольник" (c protected only полями в таком случае константность полей придётся обеспечивать другим способом.
> Кстати, обычно поля следует делать закрытыми.
В случае языков без пропертей - спорно.
Всевозможные свитчеры, которые в конструкторе сохраняют текущее состояние чего-либо, и меняют его на то, что скажут; а в деструкторе — восстанавливают исходное состояние.
Хороший пример, спасибо
Оставить комментарий
Realist
Тут вышел спор, можно ли привести пример, когда поле класса (структуры) концептуально должно быть константным, или всегда от его константности можно легко отказаться. Например, рассмотрим класс "прямоугольник", у него константное поле — площадь. Но в процессе развития кода возможно появление метода resize. Таким образом, константность этого поля — дело наживное.Далее, если поле приватное, то все обращения к нему локализованы. Легко можно убедится, что значение нигде не портится. Извне оно не портится в силу того, что поле закрыто. От модификатора const тоже легко избавиться. Кстати, обычно поля следует делать закрытыми.
В противоположность этому константность параметра конструктора копирования вечна (очевидно) и незаменима (ибо копия может сниматься действительно с константного объекта).
Надеюсь, что смысл вопроса понятен, хотя и не уверен в этом.
Свое мнение пока приводить не буду, ибо оно в процессе.