|
Прогер
|
|
Может кто нибут обяснит что такое try, catch(...)?01.05.2011, 19:14. Показов 55759. Ответов 28
Метки нет (Все метки)
0
|
|
| 01.05.2011, 19:14 | |
|
Ответы с готовыми решениями:
28
Может кто знает что такое Кто может объяснить что такое CLR? кто может поведать что такое паскаль |
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 01.05.2011, 20:17 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
РешениеВ С++ исключение — это объект. Хотя обычно говорят об исключительной ситуации в программе, такая точка зрения мало что дает, так как с ситуацией сделать ничего нельзя. Поэтому в С++ при возникновении исключительной ситуации программа должна генерировать объект-исключение. Собственно, сама генерация объекта-исключения и создает исключительную ситуацию. Такой подход очень удобен, так как с объектами, в отличие от ситуаций, мы можем много чего делать. Например, объект-исключение можно объявить как обычную переменную, передать его как параметр любым из возможных способов или возвратить в качестве результата. Можно объявлять массивы исключений или включать объекты-исключения в качестве полей в другие классы. В дальнейшем мы будем использовать термин «исключение», понимая под этим объект-исключение. Общая схема обработки исключений такова: в одной части программы, где обнаружена аварийная ситуация, исключение порождается; другая часть программы контролирует возникновение исключения, перехватывает и обрабатывает его. В С++ есть три зарезервированных слова: try (контролировать), catch (перехватывать), throw (порождать), — которые и используются для организации процесса обработки исключений. Генерация исключений Генерируется исключение оператором throw (см. п. 15.1 в [1]), который имеет следующий синтаксис throw выражение_генерации_исключения; Выражение генерации исключения на практике означает либо константу, либо переменную некоторого типа. Тип объекта-исключения может быть любым, как встроенным, так и определяемым программистом. Например:
Второй вариант — это символьная константа, которая фактически является сообщением об ошибке. Все сообщения об ошибках могут быть записаны в массиве, например:
Программист может и сам определить собственный тип объекта-исключения, объявив новый класс, например:
Объект-исключение может быть и динамическим, например:
Перехват и обработка исключений Сгенерировать исключение — это только полдела. Как уже отмечалось, исключение надо перехватить и обработать. Проверка возникновения исключения делается с помощью оператора try, с которым неразрывно связаны одна или несколько блоков обработки исключений — catch. Оператор try объявляет в любом месте программы контролируемый блок, который имеет следующий вид:
После блока try обязательно прописывается один или несколько блоков catch, которые обычно называют обработчиками исключений, или секциями-ловушками. Форма записи секции-ловушки следующая:
(тип имя) (тип) (...) Тип должен быть одним из допустимых типов исключений — либо встроенным, либо определенным программистом . Первый вариант спецификации означает, что объект-исключение передается в блок обработки, чтобы там его как-то использовать, например, для вывода информации в сообщении об ошибке. ВНИМАНИЕ При выполнении оператора throw создается временный объект-исключение, который и передается в секцию-ловушку (см. п.п. 15.1/3 в [1]). При этом объект-исключение может передаваться в секцию-ловушку любым способом: по значению, по ссылке или по указателю, например:
Первые две формы из приведенных спецификаций параметра исключения предназначены для обработки конкретного типа исключений. Если же на месте спецификации исключения написано многоточие (как в функциях с переменным числом параметров), то такой обработчик перехватывает все исключения. Работа конструкции try...catch напоминает работу оператора switch. Секции-ловушки похожи на альтернативы case, а блок catch с многоточием соответствует альтернативе default оператора-переключателя. Если в блоке try возникает исключение, то начинается сравнение типа сгенерированного исключения и типов параметров в секциях-ловушках. Выполняется тот блок catch, тип параметра которого совпал с типом исключения. Если такого типа не найдено, выполняется блок catch с многоточием. Если же такого блока в текущем списке обработчиков не обнаруживается, то ищется другой список обработчиков в вызывающей функции. Этот поиск продолжается вплоть до функции main(). Если же и там не обнаружится нужного блока catch, то вызывается стандартная функция завершения terminate() (см. п.п. 15.5.1 в [1]), которая вызывает функцию abort(). Таким образом, очень важен порядок записи секций-ловушек после контролируемого блока. Если в качестве первого обработчика после блока try задан блок catch с параметром-многоточием, то такой обработчик будет обрабатывать все возникающие исключения — до остальных секций-ловушек дело просто не дойдет. Поэтому усвойте следующее простое правило: блок catch с параметром-многоточием всегда должен быть последним. Секция-ловушка с многоточием — это крайняя мера: если уж мы в нее попали, то в программе произошло что-то совсем непредусмотренное. Поэтому в такой секции обычно выводят сообщение о непредвиденном исключении и завершают работу программы.
24
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Прогер
|
||
| 01.05.2011, 23:15 [ТС] | ||
|
Sasha,
ValeryLaptev, Спасибо большое!
0
|
||
|
|
||||||
| 01.05.2011, 23:35 | ||||||
Сообщение было отмечено как решение
Решение
9
|
||||||
|
Прогер
|
|
| 02.05.2011, 01:23 [ТС] | |
|
Sasha, Cпасибо большое
0
|
|
|
|
||
| 02.05.2011, 03:59 | ||
|
Саш, а откуда брать эти самые
?
1
|
||
|
Прогер
|
|
| 02.05.2011, 12:47 [ТС] | |
|
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||||||||||||||||||||||||
| 02.05.2011, 16:32 | ||||||||||||||||||||||||||||
|
Стандартные исключения В языке С++ в составе стандартной библиотеки реализован ряд стандартных исключений, которые организованы в иерархию классов (см. п.п. 18.6 и 19.1 в [1]). Иерархическое представление часто бывает очень полезно, так как позволяет разбить задачу на части, повысить понимание и упростить реализацию. В этом случае задействуется третий механизм объектно-ориентированного программирования — наследование. Подробности наследования мы изучим в следующей главе, а здесь рассмотрим простейший случай организации исключений. При реализации класса TArray с генерацией исключений (см. листинг 7.8) были определены три независимых типа исключений: bad_Range, bad_Index и bad_Size. Но все они имеют нечто общее — эти исключения генерируются в классе TArray. Хотелось бы как-то обозначить этот факт явным образом. Это можно сделать, используя механизм наследования: мы объявим класс TArray_exception, а остальные классы объявим его наследниками:
Несколько более сложную структуру (см. п. 19.1 в [1]) имеет иерархия стандартных исключений (листинг 7.14).
Так как обработка исключений во время выполнения программы сопровождается расходами времени и памяти, в интегрированной среде, как правило, необходимо включить соответствующий режим, разрешающий обработку исключений. Названия производных классов logic_error и runtime_error в общем-то условны. Предполагается, что исключения первого типа сигнализируют об ошибках в логике программы, например, о невыполнении некоторого условия. Категория runtime_error — это ошибки, которые возникают в результате непредвиденных обстоятельств при выполнении программы, например, переполнение при операциях с дробными числами. Эти исключения программа должна генерировать сама оператором throw. А вот следующие 5 стандартных исключений генерируют различные механизмы С++. ПРИМЕЧАНИЕ Мы тоже можем использовать эти исключения в операторе throw явным образом, однако так делать не рекомендуется во избежание путаницы. Как уже было сказано, исключение bad_alloc (см. п.п. 18.4.2 в [1]) генерирует операция new (или new[]), если запрос на память не может быть удовлетворен. Исключения bad_cast (см. п.п. 18.5.2 в [1]) и bad_typeid (см. п.п. 18.5.3 в [1]) генерируются механизмом RTTI (Run-Time Type Identification — динамическая идентификация типов). Естественно, исключение ios_base::failure (см. п.п. 27.4.2.1.1 в [1]) генерируется системой ввода-вывода. Исключение bad_exception (см. п.п. 18.6.2.1 в [1]) играет важную роль при нарушении функцией спецификации исключения (см. далее). Класс exception определен в стандартной библиотеке (см. п.п. 18.6/1 в [1]) так, как показано в листинге 7.15.
Как видим, стандартные исключения включают функцию-метод what(), которая, очевидно, выдает строку-сообщение об ошибке. Использование стандартных исключений продемонстрируем с помощью немного модифицированного примера из справочника интегрированной среды C++ Builder 6 (листинг 7.16).
Обратите внимание на одну замечательную особенность блоков catch: в качестве типа формального параметра используется базовый класс, тогда как при выполнении в обработчик попадает объект-исключение совсем другого типа — наследника от базового. Это очень важное свойство наследования — принцип подстановки — мы рассмотрим при изучении наследования. Кроме того, исключение передается в секцию-ловушку по ссылке. Почему это важно — тоже разберемся при изучении наследования.
1
|
||||||||||||||||||||||||||||
|
Прогер
|
|
| 02.05.2011, 16:34 [ТС] | |
|
ValeryLaptev,
Sasha, Cпасибо немного разобралсья!
0
|
|
|
|
|
| 02.05.2011, 23:25 | |
|
В догонку (скачать в архиве) Исключения в C++ Builder
1
|
|
|
Прогер
|
|
| 03.05.2011, 01:39 [ТС] | |
|
LK,
Чтоб я без вас сделал бы, но страница выдаёт ощибку 404 Сможете как то копировать или?
0
|
|
|
|
|
| 03.05.2011, 02:49 | |
|
постоянно забываю - ленивый делает дважды
, держи:
2
|
|
|
Прогер
|
|
| 04.05.2011, 02:30 [ТС] | |
|
LK,
Спасибо за помощ!
0
|
|
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
||||||
| 02.12.2012, 14:54 | ||||||
|
Вот этот код на исключение дает ошибку а почему я так и не понял
3
|
||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
||
| 02.12.2012, 17:17 | ||
|
0
|
||
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
||
| 02.12.2012, 22:00 | ||
|
А в том примере че я написал если файл в каталоге есть то откроет нормально,но если нету сразу ошибку выбьет! Тут наверн заместо (...) нужно че-то другое прописывать.
0
|
||
|
|
||||||
| 02.12.2012, 22:27 | ||||||
2
|
||||||
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|
| 04.12.2012, 18:42 | |
|
Странно и это ошибку бьет..
0
|
|
| 04.12.2012, 18:42 | |
|
Помогаю со студенческими работами здесь
20
Кто может доходчиво объяснить, что такое Delegate? Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы Что такое аргумент e у оператора catch? Кто обяснит как правильно строить циклы ставлю спасибо! Как такое может быть и что это такое? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|