73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
||||||
1 | ||||||
перегрузка []01.02.2013, 15:07. Показов 1410. Ответов 20
Метки нет (Все метки)
Как перегрузить operator[] так, чтобы когда я модифицировал массив то вызывалась простая версия, а когда просто выводил то const версия?
0
|
01.02.2013, 15:07 | |
Ответы с готовыми решениями:
20
Перегрузка в виде метода VS Перегрузка в виде функции друг Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов Перегрузка перегрузка <<, >>, [] |
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||
01.02.2013, 15:14 | 2 | |||||
Две версии сделай:
0
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|
01.02.2013, 15:15 [ТС] | 3 |
Я делал две версии, но вызывается чего-то только одна!
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||
01.02.2013, 15:19 | 4 | |||||
Константная версия будет вызываться только для константного объекта.
Добавлено через 1 минуту
1
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|
01.02.2013, 15:42 [ТС] | 5 |
я хочу реализовать проверку на выход за пределы массива, но тут возникла такая праблема: если будет вызываться одна и та функция [] то по сути в одну сторону можно проконтролировать а в другую нет, если i <0 еще нормально, а если i> size то тоже проконтролировать можно, но памяти под новые элементы не выделится больше никогда! Посоветуйте что-нибудь!
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
04.02.2013, 09:54 | 6 |
The_bolT, отдышитесь и сформулируйте свою мысль более понятно. Что у вас там в одну сторону контролируется, а в другую нет, и что там контролируется но не выделяется?
0
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
||||||||||||||||
04.02.2013, 15:37 [ТС] | 7 | |||||||||||||||
В С + + не контролируется выход за границы массива, вот я и решил написать программу с динамическим массивом чтобы можно было контролировать это, например:
создали мы массив размером 5 и заполнили его числами, и я хочу, чтобы моя программа не допускала такого arr [6] = 3; чтобы на этом моменте вибиволо сообщения или выходило из программы. Вот я и подумал написать две версии [] обна для модификации массива, а вторая, константная версия, только для чтения этого массива. Если не будет две версии, у меня получится фикссований массив, который после инициализации не сможет менять свой размер. Я подумал написать что-то похоже к этому, но размер массива затем изменить нельзя.
Решил сделать по другому, добавить функцию push_back чтобы добавлять элементы а в operator[] генерировать исключения, но почему я это исключение перехватить не могу? Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
04.02.2013, 16:24 | 8 |
The_bolT, ну вот, теперь совсем другое дело, теперь ясно, чего вы хотели.
Потому что вы его и не ловите. Исключение происходит не там, где вы предполагаете, в блоке try, а раньше, в строке 10, на первой же итерации цикла. Ведь вы сами сказали, что добавили метод push_back для добавления элемента, но всё равно пытаетесь использовать для этого оператор индексации.
1
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|||||||||||
04.02.2013, 16:39 [ТС] | 9 | ||||||||||
Теперь появилась другая проблема, массив имеет один элемент больше чем я задаю, и я не могу найти где добавляется лишняя единица!
Кликните здесь для просмотра всего текста
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
04.02.2013, 16:45 | 10 |
The_bolT, в конструкторе же. Вы изначально выделяете массив из одного элемента. Последующие push_back добавляют элементы, не учитывая, что один уже добавлен в конструкторе (логически его быть не должно, конструктор должен создавать "пустой" массив).
1
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|
04.02.2013, 16:54 [ТС] | 11 |
Правда в конструкторе. Теперь все работает как я хотел! Большое спасибо!
0
|
14 / 22 / 4
Регистрация: 20.01.2013
Сообщений: 125
|
|
04.02.2013, 16:59 | 12 |
класс vector вроде целиком и полностью сабж реализует
0
|
silent_1991
|
04.02.2013, 17:00
#13
|
Не по теме: alexpac26, я бы даже сказал, сверх того реализует. Только если не писать велосипеды, не спотыкаться на очевидных и не очень граблях - как тогда чему-нибудь научиться?
0
|
alexpac26
|
04.02.2013, 17:19
#14
|
Не по теме: ну велосипеды можно и более интересные придумать....
0
|
silent_1991
|
04.02.2013, 17:47
#15
|
Не по теме: alexpac26, когда я писал свой первый Vector, мне было интересно. А уж как за List принялся... :D
0
|
14 / 22 / 4
Регистрация: 20.01.2013
Сообщений: 125
|
||||||
04.02.2013, 21:41 | 16 | |||||
да что там лист, тотже вектор тока
0
|
silent_1991
|
05.02.2013, 07:52
#17
|
Не по теме: alexpac26, макросы в плюсах не кошерно. typedef достаточно.
0
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|
05.02.2013, 20:07 [ТС] | 18 |
Не хочу создавать другую тему, так как это и по сей теме относится) Хочу перегрузить операторы <,>, <=,> = но не знаю как корректно сделать сравнение массивов. Может подскажете как?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
05.02.2013, 20:17 | 19 |
The_bolT, представьте, что массив - это число, каждый элемент которого - цифра в некоторой системе счисления, и подумайте, как сравниваются обычные числа.
0
|
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
|
|
05.02.2013, 20:26 [ТС] | 20 |
silent_1991, Я еще больше вдумуюся в вашу фразу, тем больше боюсь) Можно как-то по конкретнее написать, что вы этим имели в виду?)
0
|
05.02.2013, 20:26 | |
05.02.2013, 20:26 | |
Помогаю со студенческими работами здесь
20
перегрузка >> и << Перегрузка. перегрузка [] Перегрузка + Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |