69719

Обробка несподіваних виключень

Лекция

Информатика, кибернетика и программирование

У програмі оголошені функції badnews, solver і main. Прототип функції solver перераховує виключення, що генеруються в цій функції. Проте ця функція генерує несподіване виключення, коли викликає функцію badnews.

Украинкский

2014-10-09

27.5 KB

0 чел.

Тема 9: Обробка несподіваних виключень

Обробка виключень може бути "хитрою" справою. Скільки б ви не планували обробок виключень, ви можете все ж таки зіткнутися з несподіваними виключеннями. Використання оператора catch (...) - ось один із способів обробки таких виключень. C++ пропонує ще один спосіб. У заголовному файлі Ехсерт.Н оголошені функції unexpected і set_unexpected. За умовчанням виконуюча система викликає функцію unexpected, якщо оператор catch(...) не використовувався після блоку try. За допомогою функції set_unexpected можна замінити стандартну функцію unexpected вашою власною функцією. Щоб використовувати функцію set_unexpected, викличте її і передайте їй ім'я вашої власної функції як єдиний аргумент.

Розглянемо приклад програмування, який ілюструє, як і коли використовувати функцію set_unexpected, щоб встановити вашу власну пастку - програму реакції на особливу ситуацію виключення. У лістингу 16.5 показаний початковий текст програми Error5.CPP, яка ілюструє обробку несподіваного виключення. У програмі оголошені функції badnews, solver і main. Прототип функції solver перераховує виключення, що генеруються в цій функції. Проте ця функція генерує несподіване виключення, коли викликає функцію badnews.

Представимо виведення програми в лістингу 16.5.

Hand I i ng unexpected exception!

Лістинг 16.5

Початковий текст програми ERRORS. CPP

// Програма ілюструє

// обробку несподіваних виключень

#include <iostream.h>

#include <except.h>

#include <stdlib.h>

// оголосити скелетні класи виключень

class mainerror {};

class secerror {};

class Kaboom {};

void badnewsq 

{

throw Kaboom();

}

void solver(int ncode) throw(mainerror, secerror)

{

if (ncode > 0) throw mainerror();

else if (ncode < 0) throw secerror();

badnewsq();

}

void myunexpectedo {

cout « "Handling unexpected except ion!\n";

exrt(1); // вихід з кодом помилки 1 }

ma i n() {

set_unexpected(myunexpected);

// генеруємо виключення

try {

solver(O);

}

catch (mainerror)

{ cout « "HANDI ing main exception\n";

}

catch (secerror)

{ cout « "Handl ing secondary exception\n";

}

return 0;

}

Лістинг 16.5 включає заголовні файли IOSTREAM.H, Ехсерт.Н (вони потрібні для того, щоб використовувати функцію set_unexpected) і STDLIB.H (він необхідний для того, щоб використовувати функцію exit). У лістингу 16.5 оголошені скелетні класи виключень mainerror, secerror і Kaboom, а потім декларують функції badnews, solver, myunexpected і main.


 

А также другие работы, которые могут Вас заинтересовать

4289. Связные списки, стеки, очереди 237 KB
  Связные списки, стеки и очереди Как и массивы, связные списки представляют собой универсальную структуру данных, широко используемую многими программистами. Однако, в отличие от массивов, связные списки не входят в состав стандартного языка...
4290. Виртуальный маркетинг и его применение на отечественных рынках 31 KB
  Виртуальный маркетинг и его применение на отечественных рынках Получают развитие сетевые или виртуальные организации, т.е. организации, в которых границы между его участниками, ресурсами и подразделениями размыты благодаря интенсивному информационно...
4291. Организация ветвления и его алгоритмическая структура 49.5 KB
  Организация ветвления Цель работы: освоить алгоритмическую структуру ветвление, а также работу команды ветвления. Образец решения задачи. Задача. В компьютер вводится информация: количество знаков в рекламе на какой странице в газете будет печатать...
4292. Становлення та розвиток української та європейської культури в 19 - початку 20 ст. Частина 2. Українське мистецтво 55 KB
  В першій половині 19 ст. в Україні зявився перший професійний театр. Спершу це були бродячі акторські групи. Потім з'являються перші театральні приміщення, що приймають у себе гастролерів і дають сцену для власних театральних труп. У 1818 р. Іван Котляревський очолив професійний театр у Полтаві...
4293. Освоение приемов объявления, обращения и использования двумерных массивов при решении задач. 78.5 KB
  Цель работы: освоение приемов объявления, обращения и использования двумерных массивов при решении задач. Один из возможных вариантов объявления двумерного массива в программе: объявляем две константы – максимально возможное количество строк и...
4294. Освоение приемов объявления, обращения и использования массивов при решении задач 64.5 KB
  Цель работы: освоение приемов объявления, обращения и использования массивов при решении задач. Типовые алгоритмы обработки одномерных массивов Рассмотрим некоторые типовые алгоритмы обработки массивов. Положим, что в декларативной части программы о...
4295. Капитал и его вещественное содержание 210.5 KB
  Цель курсовой работы на тему Капитал и его вещественное содержание - изучить содержание капитала, теории капитала, категории капитала и износ и амортизацию капитала. В ходе выполнения курсовой работы изучено что категория капитал имеет д...
4296. Проектирование привода конвейера. Детали машин 4.11 MB
  Выбор электродвигателя. Определение придаточных чисел привода. Межосевое расстояние. Предварительные основные размеры колеса. Проверочный расчет на прочность зубьев при действии пиковой нагрузки. Определение предварительных значений межосевого расстояния и угла обхвата ремнем малого шкива. Радиальные реакции опор от сил в зацепление. Для типового режима нагружения II коэффициент эквивалентности.
4297. Явление дифракции электромагнитных волн 118 KB
  Цель работы. Исследовать явление дифракции электромагнитных волн. С помощью дифракционной решетки проходящего света измерить длины электромагнитных волн видимого диапазона. Основные теоретические сведения Дифракцией называется совокупность явлений...