Обработка исключений в С++, Java и C#. Передача в обработчик catch целого числа

Страницы работы

Фрагмент текста работы

Программирование Тема 5 Обработка исключений в С++, Java и C#

1

Обработка исключений в C++

  • Операторы для работы с исключениями
  • try { /*контролируемый блок*/
  • [ throw выражение; ]
  • }
  • catch (тип параметра имя параметра)
  • { /* блок обработки */ }
  • catch (тип параметра)
  • { /* блок обработки */ }
  • catch (…)
  • { /* блок обработки */ }

2

Обработка исключений в C++

  • Исключения, или исключительные ситуации - это события, нарушающие нормальный ход выполнения программы.
  • Наиболее часто встречаются следующие исключения: нехватка памяти, выход индекса за границы массива, арифметическое переполнение, деление на ноль, недопустимые параметры функций.
  • в С++ для работы с исключениями используются следующие операторы: try (контролировать), throw (выбрасывать), catch (перехватывать). Синтаксис записи операторов показан на слайде 2.
  • Оператор try выделяет часть программы, в которой может возникнуть исключение.
  • Когда при выполнении программы происходит исключительная ситуация, то программа должна создать специальный объект-исключение. Объект-исключение часто называют просто исключением, а процесс его создания выбрасыванием исключения (exception throwing).
  • Исключения могут выбрасываться автоматически (неявно) в случае их возникновения. В этом случае создаются объекты-исключения стандартных классов исключений. Также исключения можно явно выбрасывать с помощью оператора throw. Выражение, стоящее после ключевого слова throw на практике означает, либо константу, либо переменную некоторого типа. Тип может быть любым (встроенным или пользовательским). Часто после ключевого слова throw указывают объект класса исключения (стандартного или пользовательского).
  • Исключение может выбрасываться в функциях, прямо или косвенно вложенных в try-блок. Контролируемый блок, помимо функции контроля, обладает функциями обычного блока: все переменные, объявленные внутри него, являются локальными в этом блоке и не видны вне его.
  • После блока try обязательно прописывается один или несколько операторов catch.
  • Оператор catch определяет обработчик исключения, которому передается управление в случае возникновения исключения. Управление передается тому обработчику тип параметра которого совпадает с типом объекта-исключения. Если на месте параметра в обработчике catch написано многоточие, то такой обработчик перехватывает все исключения. Оператор catch с параметром-многоточием всегда должен быть последним.

3

Обработка исключений в C++

  • Варианты создания объекта класса исключения
  • try { …
  • if (/*условие возникновения исключения*/)
  • { TException e; //создание объекта e класса
  • // исключения TException
  • throw ex;
  • или
  • throw TException(); //создание безымянного
  • // объекта класса исключения TException
  • }
  • }
  • Способы передачи объекта класса исключения в обработчик:
  • catch (TException e) // по значению
  • catch (TException& e) // по ссылке
  • catch (const TException& e) // по конст. ссылке
  • catch (TException *e) // по указателю
  • catch (const TException *e) // по конст. указателю

4

Обработка исключений в C++

  • В С++ порождаемое исключение может быть константой или переменной любого встроенного или пользовательского типа, но чаще всего – это объект класса исключения.
  • На слайде 4 показаны способы создания объекта класса исключения и способы передачи объекта класса исключения в обработчик.
  • Работа конструкции try...catch напоминает работу оператора switch. Операторы обработчики похожи на альтернативы case, а блок catch с многоточием соответствует альтернативе default оператора-переключателя. Если в блоке try возникает исключение, то начинается сравнение типа сгенерированного исключения и типов параметров в секциях-обработчиках. Выполняется тот блок catch, тип параметра которого совпал с типом исключения. Если такого типа не найдено, выполняется блок catch с многоточием. Если же такого блока в текущем списке обработчиков не обнаруживается, то ищется другой список обработчиков в вызывающей функции. Этот поиск продолжается вплоть до функции main(). Если же и там не обнаружится нужного блока catch, то вызывается стандартная функция завершения terminate(), которая вызывает функцию abort().
  • Выход из обработчика по исключению может привести к выходу из функции. Очень важно, что стандарт в этом случае гарантирует вызов деструкторов для уничтожения локальных объектов.
  • После выполнения операторов блока catch выполняются операторы

Похожие материалы

Информация о работе