|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.04.2019, 06:26 | #1 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Что должна возвращать фунция-член?
Есть класс контейнера, назовём его TList и класс его элемента, назовём его TItem. В классе TList есть функция-член Find, принимающая некий параметр и ищет элемент, у которого значение определённого члена (всегда одного) равно значению параметра. Если элемент найден, то всё просто: можно вернуть ссылку на найденный элемент. А что делать, если элемент не найден? Нельзя же возвращать как ссылку *nullptr? Указатель тоже возвращать не охота. Во-первых const Item* – это указатель на const Item, но сам указатель – не константа. К нему можно применить инкремент, или декремент, можно выполнить
Код:
Код:
Последний раз редактировалось taras-proger77; 17.04.2019 в 06:39. |
17.04.2019, 07:36 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
|
17.04.2019, 07:50 | #3 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Доступ по элементу к его соседям должен быть запрещён в любом случае. Независимо от того, найден элемент, или нет. Вообще не смотрите, что контейнер назван списком. Список – это только внутреннее представление совокупности данных, внешнего интерфейса списка здесь нет и быть не должно.
Последний раз редактировалось taras-proger77; 17.04.2019 в 07:55. |
17.04.2019, 08:16 | #4 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
Код:
|
||
17.04.2019, 08:21 | #5 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
|
17.04.2019, 08:22 | #6 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
|
17.04.2019, 08:33 | #7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
|
17.04.2019, 11:19 | #8 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
вернуть итератор (итератор может быть end) плохой вариант: вернуть указатель (указатель может быть nullptr) для извращенцев: можно использовать std:ptional, etc. для дебилов: в случае успеха можно можно возвращать ссылку. в случае провала - кидать эксепшен. для настоящих ценителей: в случае успеха можно можно возвращать ссылку. в случае провала можно - ссылку на объект-заглушку. |
|
17.04.2019, 11:31 | #9 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
А член-то тут причем вообще? Что-то поменяется если она не членом будет? (как многие функции STL)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
17.04.2019, 14:40 | #10 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает функция которая должна с json формата возвращать в стандартный | dimaSlon | Qt и кроссплатформенное программирование С/С++ | 76 | 08.06.2018 17:35 |
Дан первый член и разность арифметической прогрессии, найти член прогрессии с номером n | nomin | Помощь студентам | 2 | 06.12.2014 16:43 |
Фунция для подсчета повторяющихся значений | Brucebelg | Microsoft Office Excel | 7 | 08.08.2012 14:33 |
поменять местами наибольший член и член с номером m | Zhasik | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 27.12.2010 08:39 |
Рекурсивная фунция в Паскале | bwitcher | Помощь студентам | 10 | 13.12.2010 17:51 |