Что означает модификатор const после объявления метода - страница 2

 
Vasiliy Sokolov:
Константный метод - очередной пример пословицы "хотели как лучше, получилось как всегда". Думаю для С++ это вообще девиз. Практической пользы нет никакой, зато существенно затрудняет проектирование ООП-программ, т.к. постоянно требуется контролировать тип модифицируемого объекта (должен быть также константным). 

Можно пример того, о чем Вы написали?

 
Vasiliy Sokolov:
Константный метод - очередной пример пословицы "хотели как лучше, получилось как всегда". Думаю для С++ это вообще девиз. Практической пользы нет никакой, зато существенно затрудняет проектирование ООП-программ, т.к. постоянно требуется контролировать тип модифицируемого объекта (должен быть также константным). 

))) У меня лежит старая книга Страуструпа, если в дом ворвутся грабители, я ей легко отобьюсь, она как кирпич весит )) Старик таких сложностей навставлял в язык..

Помню, меня давно гоняли на собеседовании по плюсам, задали вопрос и я на него не смог точно ответить. Принесли подобный талмуд, почитал, спрашиваю,- а вы сами это применяете?

Ребята такие смеются, все ок, на этот вопрос еще никто правильно не ответил, так как никто не использует.

Кстати, где-то лежит книга по плюсам начала 90-х, еще до принятия первого стандарта. Нормальная удобоваримая книжечка в бумажной обложке. А потом Остапа понесло ))

 
Alexey Kozitsyn:

Можно пример того, о чем Вы написали?

Пример Алексей написал. Константный метод не может менять члены своего класса. Казалось бы в чем проблема? Просто не используй модификатор const. Но тогда возникают трудности в наследовании (особенно от стандартной библиотеки): проектировщик определил виртуальный метод const, а в производном классе, методу требуется кое-что поменять в своих данных - и тут затычка из-за const. Без него переопределения метода не произойдет, а с ним производный метод не сможет менять данные своего же класса.

В чем главная ошибка введения такого модификатора для методов класса? В том что нарушается главный принцип наследования: специализации и уточнения. Базовый класс запрещает работать методу производного класса с его внутренними данными. А такого быть не должно.

 
Vasiliy Sokolov:

Шарпом за версту несет ))

Ничего const не затрудняет, не надо ля-ля

 
Комбинатор:

Шарпом за версту несет ))

Я и не отрицаю. Шарп действительно совершенный, великий и прекрасный язык.

Комбинатор:

Ничего const не затрудняет, не надо ля-ля

Хорошо, допустим с const всегда можно вывернутся. Но лучше кратко объясни на примере, что дает const? В чем его реальная польза? На примере, и желательно не из пальца высосанном.

 
Const - это одна из ярких метафор  C++: сначала усердно расставляешь изощренные ловушки по всему коду, а потом сам же из своих ловушек выворачиваешься - в этом весь процесс программирования на С++.
 
Vasiliy Sokolov:

...

В чем главная ошибка введения такого модификатора для методов класса? В том что нарушается главный принцип наследования: специализации и уточнения. Базовый класс запрещает работать методу производного класса с его внутренними данными. А такого быть не должно.

Может это какая-то часть, которая дается от создателей к простым юзерам. Как функция start в советнике и переменные Bid, Ask.

Когда все полностью сам делаешь, то нет смысла заморочиваться всякими const.

 
Vasiliy Sokolov:

Я и не отрицаю. Шарп действительно совершенный, великий и прекрасный язык.

...

Великий. Но до совершенства ему очень далеко.
 
Dmitry Fedoseev:
Великий. Но до совершенства ему очень далеко.
Шарп хорош не тем, что его делали какие-то там гении, а тем что он последний. До него на протяжении 30 лет пробовали убиваться граблями самых разных размеров и причудливых конфигураций. С++ для этого был замечательным полигоном. После того, как все переубивались, ребята из Microsoft просто спизд... переняли опробированные концепции и создали синтаксически чистый язык с нуля. 
 
У MetaQuotes кстати тоже был не хилый шанс постепенно "развить" MQL5 в граблеподобного монстра а-ля C++. Но глубокие познания в С++ (где наверняка были пот, слезы и ненависть), помогли понять, что следовать советам форумным олдскул программерам С++ ни в коем случае нельзя. Поэтому сейчас имеем синтаксически чистый и более менее строготипизированный язык программирования. Даже удивительно, что удалось создать такую конфету, базируясь при этом на совершенно чудовищном наследии. Мастерство не пропьешь как говорится.
Причина обращения: