LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

для изменения полей const объекта в const методах мы назначаем полям атрибут mutable»

Дык в джаве или C# просто нет константых методов (и заодно константых объектов) и всё. Только поэтому «костыль» и не нужен. При помощи mutable можно делать кеширование или прочие вещи обеспечивания «логическую константность». Плюсы можно пинать за разные кривости, но именно тут ты зря придрался.

А поскольку нам все-таки нужно иметь доступ к члену класса извне, то назначаем friend функции

Так мы не просто «разрешаем (всем) доступ извне» - доступ выдаётся конкретной функции (или классу), причём это является частью интерфейса класса: посмотрев на определение класса ты можешь увидеть всех «друзей», это не станет сюрпризом. Как правило без этого действительно можно обойтись, кроме редких исключений вроде операторов.

Честно говоря, то, что ты только об этом узнал, а вовсю рассуждаешь о С++ уже давно, вызывает некоторые вопросы. (:

Исходная версия DarkEld3r, :

для изменения полей const объекта в const методах мы назначаем полям атрибут mutable»

Дык в джаве или C# просто нет константых методов (и заодно константых объектов) и всё. Только поэтому «костыль» и не нужен. При помощи mutable можно делать кеширование или прочие вещи обеспечивания «логическую константность». Плюсы можно пинать за разные кривости, но именно тут ты зря придрался.

А поскольку нам все-таки нужно иметь доступ к члену класса извне, то назначаем friend функции

Так мы не просто «разрешаем (всем) доступ извне» - доступ выдаётся конкретной функции, причём это является частью интерфейса класса: посмотрев на определение класса ты можешь увидеть всех «друзей», это не станет сюрпризом. Как правило без этого действительно можно обойтись, кроме редких исключений вроде операторов.

Честно говоря, то, что ты только об этом узнал, а вовсю рассуждаешь о С++ уже давно, вызывает некоторые вопросы. (: