2 / 2 / 2
Регистрация: 16.10.2011
Сообщений: 179
|
||||||
1 | ||||||
Перегрузка оператора индексации в списке13.05.2013, 15:11. Показов 3495. Ответов 3
Метки нет (Все метки)
Доброго времени суток.
Имеется список, внутри которого соответственно структура, имеющая элемент данных int и две ссылки вперед/назад Каким образом нужно перегрузить оператор индексации [] для того, чтобы можно было напрямую использовать на выходе тип данных int и работать с ним?
0
|
13.05.2013, 15:11 | |
Ответы с готовыми решениями:
3
Перегрузка оператора индексации Перегрузка оператора индексации [] Перегрузка оператора индексации [] Перегрузка оператора индексации |
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
13.05.2013, 15:25 | 2 |
mappy89, Да ты все правильно перегрузил. Попробуй просто вернуть кокое нибуть число из функции, если ошибки не будет значит ты чо то где то с классом напортачил.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
13.05.2013, 17:01 | 3 | |||||
0
|
Ушел с форума
|
||||||||||||||||
14.05.2013, 09:17 | 4 | |||||||||||||||
Сообщение было отмечено как решение
Решение
mappy89, с архитектурной точки зрения связный список вообще не должен иметь
оператора индексации и других методов, организующих произвольный доступ к содержимому. Получение энного элемента - это крайне неэффективная операция, просто по причине устройства связного списка: при каждом вызове выполняется цикл с проходом от начала списка до нужного элемента. Просто подумайте, как это будет работать, если количество элементов достигнет хотя бы нескольких тысяч. Связный список, маскирующийся под обобщенный универсальный контейнер с произвольным доступом - это "дырявая абстракция". Если требуется читать и записывать из середины, лучше использовать другой контейнер, где индексация выполняется естественным образом.
Например, size_t или ptrdiff_t. Так вы расширяете теоретический максимум индекса, а также страхуете себя от возможных проблем при переносе кода на 64-битные платформы. Кроме того, использовать тип size_t и его псевдонимы для размеров - общепринятая практика. Во-вторых, оператор индексации должен иметь две версии - обычную и const. const-версия нужна, когда доступ к списку нужен только на чтение. Например, функция, вычисляющая сумму всех элементов списка, не модифицирует его, поэтому она может иметь следующую сигнатуру:
вызывать только const-методы. Однако, если в классе my_list не определен const-оператор индексации, попытка прочитать что-нибудь вызовет ошибку компиляции. С учетом написанного, прототипы оператора индексации должны быть такими:
4
|
14.05.2013, 09:17 | |
14.05.2013, 09:17 | |
Помогаю со студенческими работами здесь
4
Перегрузка оператора индексации Перегрузка оператора индексации и присваивания (C++) Перегрузка оператора индексации для связанного списка Перегрузка оператора индексации в одном классе и использование в другом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |