![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Xenon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Немного не понимаю, для чего они, собственно, нужны в некоторых случаях ...
Ну вот у меня метод из классы, для записи файла
Если ошибку обработать при помощи исключений, то получится:
И какое тогда премущество ? То, что вся обработка ошибка запихнута в catch а не раскадинана по методам классов и только? Не понимаю зачем они нужны ... Приведите, если не сложно, примеры, а то я чего-то запутался ![]() |
||||
|
|||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Исключения нужны, чтобы обрабатывать ошибку не на том уровне логики, где она возникает, а выше, где приложению ясно, что с ней делать.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
исключения - унифицированный способ обработки ошибок
при использовании исключений получаем все претмущества классов (в частности полиморфизм) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Хм ... а пример? Приведите пример, где это удобнее, чтобы очевидно почувствовать разницу.
PS. По правилам хорошего кодинга для каждого класса нужно создавать один класс, например, Error, для схватки ошибок, или же лучше ошибки разбивать на разные группы? |
|||
|
||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Хотелось бы добавить, что исключения - единственный оптимальный вареант для обработки ошибок, возникающих в конструкторах.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
имхо, в любом случае удобнее -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
MAKCim, Ну вот в том варианте, что я кинул, имхо, нет
![]() Это сообщение отредактировал(а) XenonSk - 12.6.2006, 21:13 |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Зато как хорошо вызывающему коду отлавливать ошибку записи, а? Плюс безопасность исключений требует не просто применения throw/catch, но и изменение дизайна класса/функции. При грамотном использовании удобство чувствуется очень сильно - упрощает жизнь. |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ну да,
получается что если !outfile то выводится сообщение об ошибке и программа выполняется дальше? outfile не открылся а туда что-то записывается? здесь как раз вариант с исключениями правильнее Это сообщение отредактировал(а) MAKCim - 12.6.2006, 21:28 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Все опять же зависит от случаяя. Исключения все равно не стоит использовать везде подряд, например если нужно обрабатывать ввод пользователя по каким-то ограничениям, то исключения вряд ли будут логичным решением. А вот например низкоуровневые вещи, о которых пользователь знать не должен, сообщения об ошибках которые адресованы разработчику, лучше генерировать исключениями.
Еще пример можно привести - это написание различных библиотек, где предпологается, что ими будут пользоваться разработчики которые не знают об их устройстве. Чтобы руководить их действиями и указывать на то что они не правильно используют тот или иной класс, удобней использовать исключения. Это ВсЁ моЁ ИМХО! |
|||
|
||||
Xenon |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Dray, Ну, то есть, ты предлагаешь юзать только, фактически, badalloc?
MAKCim, Ну тут же я открываю файл и знаю, если произошла ошибка, то, скорее всего, это связано с некотрыванием файла ![]() Ну вот вся прога ... Я только в некоторых местах воткнул исключения и не понял, чего они мне тут дают. Говорю, писали, что преимущество в том, что ты не знаешь, какая ошибка, но ведь это можно на месте проверить в том же методе?
Это сообщение отредактировал(а) XenonSk - 12.6.2006, 21:49 |
||||||
|
|||||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
весь фокус в том, что проверить ты можешь, а обработать не всегда. Мало-ли какие у тебя были действия до того как возникла ошибка, т.е как уже говорили исключения нужны для того чтобы ты мог обрабатывать какие-то ситуации не там, где они возникают, а там где тебе удобнее их обрабатывать. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Fazil6, То есть фишка, как я и писал, только в том, что обработка ошибок организуется - пихается куда хочется.
|
|||
|
||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Страуструп сказал надо использовать исключения и всё! Дальше вопрос можно закрывать...
![]() ![]() ![]() ...Вряд ли найдется человек, который впервые узнав про указатели сразу понял зачем они. Я вот, например, пока не изучил динамические структуры данных так и не понимал зачем эти указатели. А сейчас уже понимаю, что они и не только для связных списков и прочего нужны. С исключениями тоже самое. Их приимущество скорее всего почувствуется позже, в какой-нибудь конкретной ситуации. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Dray, Не знаю, я не так и долго изучаю C++, да и вообще, как прошел тему про указатели сразу понял что к чему и зачем они нужны, видать книга хорошая. Но искоючения там вскольз описаны, поэтому я жутко торможу, но вроде исходя из постов других я понял, что мои предположении оказались правильными
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |