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.


 

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

23920. Еврипид «Медея» 15.37 KB
  Еврипид Медея В основу Медеи положен известный миф об аргонавтах т. Тогда царь Ээт задал ему 3 задачи но ему помогла их выполнить дочь Ээта волшебница Медея. Медея усыпила огнедышащего дракона кй сторожил руно и Ясон похитил его. А потом Медея рассказывает коринфским женщинам хор о своем несчастье.
23922. Древнегреческая комедия. Общий обзор творчества Аристофана 28 KB
  Комедия, вторая отрасль греческой драмы, получила в Афинах официальное признание значительно позже, чем трагедия. Состязания «комедийных хоров» были установлены на «Великих Дионисиях» только около 488 — 486 гг.
23924. Загальноприйняті принципи і системи обліку 93 KB
  Загальноприйняті принципи бухгалтерського обліку. Міжнародні та національні стандарти бухгалтерського обліку. Фінансовий та управлінський облік, принципи їх побудови. Технологічний процес та процедури фінансового обліку.
23925. Лягушки 13.32 KB
  Бог Дионис решил спуститься в царство мертвых за своим любимцем Еврипидом т. Здесь описся путешествия Диониса. Но потом он дал Дионису львиную шкуру палицу свою. Дионис со своим рабом Кеамтием отпр в путь.