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.


 

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

60065. Сценарий посвящен Дню Победы 28.5 KB
  Вот и наступил долгожданный День Победы! 9 Мая—светлый и радостный праздник. 68 лет назад в этот день закончилась война с немецким фашизмом. Мы с благодарностью вспоминаем наших воинов, защитников, отстоявших мир в жестокой битве.
60066. Їжачок-хитрячок і лісова школа 50 KB
  Мета. Учити дітей співвідносити кількість предметів із цифрами, розуміти і правильно використовувати слова та вирази: порівну, більше на один, менше на один; виділяти загальні ознаки предметів...
60068. Вечорниці-фантазії “На Андрія робиться дівицям надія” 32 KB
  Заходять дівчата1 ДІВЧИНА: Дівчата не роздягайтеся.2 ДІВЧИНА: Чого причепились Не смішіть не заважайте ідіть геть2 ХЛОПЕЦЬ: Макітру вареників на стіл підемо 1 ДІВЧИНА: Та вже будуть вам вареники їжте хоч лусніть тільки воду дайте донести...
60069. Ранок: «Зимонька – зима» 41 KB
  Вгадайте хто це зима Прийшла до нас бабуся У білому кожусі Поля причепурила Сріблястим снігом вкрила. Зима Прийшла зима біловолоса Неначе білим полотном Блискучим снігом одяглося Село і поле за селом.
60070. Мово рідна, слово рідне… Сценарій свята 36.5 KB
  Епіграф: Мова це думки звук Мова це серця стук. Мова це знань джерело. Мова це птаха крило Мова це наші знання Мова це ти і я Хід свята: 1й ведучий: Добридень всім присутнім в залі: І вчителям і школярам І тим гостям що завітали.
60071. Сценарій тематичного вечора «Память серця» 57 KB
  Диктор 22 червня 1941 року, неділя. Той чорний день пам’ятають всі. Сільський ранок. Невгамовна дітвора вже на вулиці. Яскраве сонце у волошковому небі, лагідний літній вітерець, дітвора, яка раділа погожому дню, ще не знали, що вже дзвонить...
60072. Виховний захід «Люблю тебе всім серцем і душе, моя рідненька, Україно!» 55.5 KB
  Господиня співає колискову і колише ляльку на руках Оленка: Я чую голос матері ніжненький Вона мені тихесенько співа Щомить мене ласкою зігріва. Господиня: Спіть мої дітоньки спіть засинайте Швидко в солодкому сні підростайте.
60073. Історична пізнавально-розважальна гра «Гей ви, козаченьки!» 39 KB
  Мета. Систематизувати і узагальнити знання дітей з історії українського козацтва. Сприяти пізнавальній активності учнів. Розвивати увагу, мислення, вміння працювати командою.