![]() |
|
Модераторы: bsa |
![]()
|
|
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Читая учебник и попутно размышляя я столкнулся с модификатором const. И по нему у меня вопрос.
Если данный модификатор const используется с переменной то всё понятно. Переменной получено значение один раз, и больше значение данной переменной не изменится в будущем. Но хотя б один раз переменная получит значение. Так? А как понять метод с модификтором const ? Ведь в методе то может быть несколько переменных, да и вообще я не совсем понимаю как метод может не изменяться вообще. Есть у кого-нить примеры из практики употребления? |
|||
|
||||
| BlackSpace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.4.2014 Репутация: 1 Всего: 1 |
hoz, а какую книгу по ООП C++ Вы читаете?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
BlackSpace, Дейтела "Как программировать на С"
|
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
feodorv, в примере по Вашей ссылке всё расписано очень доходчиво. Но как-бы сказать, у меня всё-таки есть некоторое недопонимание. Попробую объяснить.
Вот данный код:
Данный метод int getValue() const так и так возвращает значение t. Иначе и быть не может. К чему тут модификатор const? Там, в любом случает, нет вероятности изменения переменной t, т.к. метод int getValue() const только возвращает значение t, и, ничего с ней не делает вообще... Если не вникать в детали и тупо читать, то всё то понятно. Но вот если включить логику, то не совсем понятно. Хочется всё-таки уяснить причину использования данных модификаторов... Это сообщение отредактировал(а) hoz - 26.4.2014, 12:23 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
||||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Например? В выше приведённом примере объект test создан, и он не константный. Через него вызывается как константный метод getValue() const, так и не константный объект void debug(). Это сообщение отредактировал(а) hoz - 26.4.2014, 12:37 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
|
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Тут понятно. Тогда в предыдущем примере, что я привёл выходит, т.к. нет там константного объекта модификатор const был не уместен? Или они на всякий случай так сделали?
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
программист пишет код не для примеров, а для работы. Любой класс должен выдавать ровно столько, сколько нужно и работать в максимально широкой сфере. Поэтому есть золотое правило - все методы должны быть константными, за исключением тех, которые не могут быть ими. Это упрощает понимание кода и упрощает его использование как в обычных ситуациях, так и в многопоточной среде(что уже стало обычной ситуацией). |
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Я сколько встречал примеров константных методов, так попадаются только get-функции. Других не попадалось. Я вот пытаюсь представить какие ещё могут быть примеры употребления модификатора const, но кроме как возвратить некое значение (чаще полученное через get-функцию) ничего на ум не приходит. Какие ещё бывают варианты употребления модификатора const? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
operator+,* и т.д. К примеру.
|
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
hoz, если что-то не модифицирует внутреннего состояния, то какого поведения ты ожидаешь? Конечно в конечном итоге это всё сводиться к get
|
|||
|
||||
| hoz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
vinter, ну я встречал применение данного модификатора для функций print, например. Хотя опять же, подобные операторы лишь выводят на экран (или на какой-нить ещё интерфейс) информацию и всё. Лично мне как-то сложновато понимается тот факт, что функции по факту нечего не изменяют, но тут ещё нужно модификатор поставить, что мол данная функция не изменяет ничего... В том время как и так понятно что они ничего не могут изменить. У Дейтела ещё и принты тоже константные:
|
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |