![]() |
|
Модераторы: bsa |
![]()
|
|
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
делаю класс для массива безопасного. такой вопрос : как перегрузить [] ?
если я убираю операцию & то я могу вернуть при неправильном обращении к элементу -1, но при этом не смогу в других функциях задать значение элемента. как же быть ? |
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
1. подставлять заглушку, типа
но не советую. 2. вызывать исключение - предпочтительнее. 3. пользовать итератор - "обход" небезопасности [] 4.. использовать std::vector, в котором есть все три способа небезопаное [] безопасное с исключением at() и итераторы 5... Это сообщение отредактировал(а) mes - 19.4.2009, 13:35 |
|||
|
||||
| and277 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Не надо возвращать ретёрном ничего! Используй exit(1);
Это сообщение отредактировал(а) and277 - 19.4.2009, 14:05 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
И можно будет дальше спокойно продолжать заполнять массив ?! |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
Acer, не срабатывает этот метод )
mes спасибо большое, помогли Это сообщение отредактировал(а) afanp - 19.4.2009, 15:57 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Там же границы проверяются на входе... Я не как не смогу записать за границы массива! exit(1) -аварийно завершит программу если условие не выполняется. Поправьте если я не прав. |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
afanp,
сделай две версии []. и не надо никакого -1
|
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
Rififi,
а можете объснить как это работает? |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
afanp,
точно также, как и у тебя, только бросается исключение при выходе индекса за границы массива. константная версия op[] нужна чтобы получать значение у константного объекта. |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
Rififi, спасибо
|
|||
|
||||
| sdukshis |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Наверное в качестве первой перегрузки Вы имели в виду следующее:
Для работы с константными объектами. |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Acer
Имена начинающиеся с подчеркивания или содержащие двойное подчеркивание зарезервированы для внутреннего использования..их использование нежелательно
а так чем плохо? |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
А Можете объяснить как именно это работает?
всмысле почему нам нельзя просто вернуть -1 или что то еще? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
а почему нам нельзя перегрузить например оператор == и с его помощью складывать два операнда. вот смешно то будет. а ещё смешней если перегруженный операнд < будет наоборот работать как >. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
вот за такие вещи надо отрывать руки, а лучше сразу убивать Добавлено @ 08:39 с подчеркивания и следующей за ним заглавной буквы Это сообщение отредактировал(а) J0ker - 20.4.2009, 08:47 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
функция exit завершает программу, не покидая текущего блока, не удаляя обьекты с автоматическим временем жизни, а поведение программы при удалении обьектов со статическим временем жизни - неопределено стандартом. Все еще считаете это хорошим решением? уточнил немного Это сообщение отредактировал(а) azesmcar - 20.4.2009, 09:24 |
|||
|
||||
| and277 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Я написал то что помню с подобного примера из учебника Шилдта. Там это именно так делалось. Не верите сами гляньте Самоучитель С++. Последствия этого там не расписано. |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
and277
Зачем мне туда заглядывать?
Ну так я описал последствия. Если считаете эту информацию лишней можете ее пропустить. Это сообщение отредактировал(а) azesmcar - 20.4.2009, 09:11 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| and277 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Ну почему же. Считаю полезной. Я только не понял зачем в книге такие приемы использовали |
||||
|
|||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ну значит Шилдт чудак с большой буквы Мэ понапишут всякого дерьма в учебниках, а потом сиди ковыряй полтонны кода - и почему это программа выпадает без всяких кордампов и т.п. а это вот такой вот самоученик накодил хорошо если еще исходники есть |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Я пока учусь... Уж извеняйте. Или все начинали кодить без ошибок? |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
помимо тонкостей (которые в нормальной ОС, впрочем, не так важны), о которых написал azesmcar, существует еще здравый смысл и уважение к пользователю вашего кода |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
значит учитесь по другим учебникам. или наУчитесь писать "неправильный" код. рекомендуемая литература здесь Это сообщение отредактировал(а) zim22 - 20.4.2009, 09:31 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Ок. Ты действительно считаешь что нужно отрубить руку и всё будет прекрасно? А можно как то это было мягче сказать? Я тоже могу отрубить любому за любую ошибку и чо дальше? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Ну отрубать руки это немного образное выражение, не надо воспринимать его так буквально Запоминайте информацию, она лишней не бывает по моему опыту, из одной книги всего не узнаешь, лучше узнать сейчас, чем потом на личном опыте |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
J0ker,
![]() Herb Sutter - More Exceptional C++ согласен, там неточность.. ![]() выше написано вот это, когда ниже читал как-то пронеслось автоматически Все - это предел, отныне читаю только на английском Это сообщение отредактировал(а) azesmcar - 20.4.2009, 09:52 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
azesmcar просто уважаю тебя...
Книги буду читать... Ибо из "детских подштанников" самоучителей пока не вылез. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
зато в конце имени можно приписывать знак подчёркивания. удобно отличать private переменные от обычных. |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
по моему все равно лучше не искушать себя этим стилем
спасибо, польщен
Ну это один из стилей написания програм, микрософт например предпочитает m_ (точнее предпочитала во времена MFC, сейчас у них в стандарте кодинга C# описан именно этот стиль - с подчеркиванием в конце) В принципе это уже вопрос вкуса и стиля написания кода компании в которой вы работаете ибо единый стиль написания кода в компании это по моему одно из важнейших пунктов за которыми надо следить. Это сообщение отредактировал(а) azesmcar - 20.4.2009, 10:04 |
||||||
|
|||||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
![]()
|
| Правила форума "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. |