|
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
|
|||||||||||
Константные функции-члены класса, возвращающие ссылку на константу08.08.2011, 21:09. Показов 13283. Ответов 64
Метки нет (Все метки)
Упражняюсь по книге Липпмана, выполняю задания по теме классы.
Необходимо реализовать класс person, который способен хранить имя и адрес человека, а также создать функции, возвращающие при обращении имя и адрес. Вопрос, который ставит автор книги: "Должны ли эти функции быть константными? Объясните почему." Вот тут я начал путаться. Вот моя реализация: файл person.h
1) Константными эти функции должны быть, так как они не меняют значений переменных-членов объекта. 2) Возвращать они должны лишь константную ссылку на строку, а не просто тип string, дабы избежать ненужного копирования. Прав ли я? Если нет, то объясните почему.
0
|
|||||||||||
| 08.08.2011, 21:09 | |
|
Ответы с готовыми решениями:
64
Константные функции-члены ? класс «Строка» (данные-члены класса – строчка, функции-члены класса – операции) |
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
| 10.08.2011, 18:07 | |
|
0
|
|
|
Заблокирован
|
|
| 10.08.2011, 19:44 | |
|
const_cast малость не подходит под категорию "случайное изменение инкапсулированных данных", всё по делу
1
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 10.08.2011, 19:48 | ||
0
|
||
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|||
| 10.08.2011, 21:14 | |||
|
0
|
|||
|
Заблокирован
|
||
| 10.08.2011, 21:30 | ||
|
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 11.08.2011, 11:02 | ||
|
2
|
||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|||||||
| 11.08.2011, 12:09 | |||||||
|
Пока так и не увидел ни одного реального довода в пользу НЕиспользования константных ссылок в качестве возвращаемого значения. Пример вроде
0
|
|||||||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
|
|||
| 11.08.2011, 12:26 | |||
|
1
|
|||
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||
| 11.08.2011, 13:14 | ||||
|
0
|
||||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 11.08.2011, 13:35 | |
|
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.08.2011, 13:37 | |
|
grizlik78, а кто предлагал отказаться? Предлагается не возвращать ссылки на закрытые члены класса, и всего-то))
0
|
|
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 11.08.2011, 13:48 | |
Сообщение было отмечено как решение
Решение
Ну меня, по-крайней мере, не убедили.
![]() Если пользователь случайно или намеренно меняет значения по ссылкам/указателям на константу, то он ССЗБ. Надо такому пользователью в одном из вызовов вернуть ссылку на настоящую константу, пусть попрыгает
5
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.08.2011, 14:06 | |
|
0
|
|
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
| 11.08.2011, 16:33 | |
|
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.08.2011, 23:11 | |
|
Avazart, разумеется. Возвращая string, вы возвращаете объект, т.е. копируете все его данные (в том числе надо выделить память под новую строку и скопировать в неё содержимое старой). Возвращая string &, вы, по сути, возвращаете адрес.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 12.08.2011, 00:03 | |
|
Avazart, ага, а const_cast отметает это дело, поэтому я всё-таки за возвращение копии.
1
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 12.08.2011, 07:14 | |
|
Ну, с одной стороны стандарт разрешает компилятору из цепочки копирований объекта удалять очевидные. Если это относится и к случаю копирования в переменную объекта, возвращаемого из функции по значению, то это делает данный спор несколько бессмысленным. А с другой стороны итераторы STL, например, специально спроектированы так, что после изменения контейнера становятся недействительными, но из-за этого никто не призывает от них отказаться.
0
|
|
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||
| 12.08.2011, 11:36 | ||
|
0
|
||
| 12.08.2011, 11:36 | |
|
Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? ООП - Указатели на функции члены класса Массив указателей на функции-члены класса
Использование указателей на функции-члены внутри самого класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|