69720

Неспіймані виключення

Лекция

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

Не дивлячись на найвідчайдушніші спроби обробити виключення, бувають випадки, коли необхідно припинити виконання програми. Відновлення після таких виключень (а також фатальних) неможливе. C++ дозволяє використовувати функції terminate...

Украинкский

2014-10-09

26.5 KB

0 чел.

Тема 10: Неспіймані виключення

Не дивлячись на найвідчайдушніші спроби обробити виключення, бувають випадки, коли необхідно припинити виконання програми. Відновлення після таких виключень (а також фатальних) неможливе. C++ дозволяє використовувати функції terminate і set_terminate. Ці функції оголошені в заголовному файлі Ехсерт.Н. Функція terminate завершує виконання програми за умовчанням. Ви можете визначити вашу власну функцію завершення, викликавши функцію set_terminate і передавши їй адресу вашої функції.

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

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

Terminating program. That's al I folks!

Лістинг 16.6

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

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

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

«include <iostream.h> «include <except.h> «include <stdl ib,h>

// оголосити скелетні класи виключень class mainerror {; class secerror {; class Kaboom {;

void badnews() <

throw Kaboom(); }

void solver(int ncode) throw(mainerror, secerror) { if (ncode > 0) throw mainerror(); else if (ncode < 0) throw secerror(); badnews(); }

void myterminateo {

cout << "Terminating program. That's al I folks!\n";

exit(1); >

main() {

setjterm i nate(myterm i nate);

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

try {

solver(O);

catch (mainerror)

cout « "HANDI ing main exception\n"; catch (secerror)

cout « "Handiing secondary exception\n";

}

return 0;

}

Лістинг 16.6 багато в чому подібний до лістингу 16.5. Новий лістинг створений шляхом заміни функцій set_unexpected і myunexpected функціями set_terminate і myterminate і повідомлення, що видається останньою функцією. Не дивлячись на те, що програми в лістингах 16.5 і 16.6 подібні, вони виконують абсолютно різні дії. Лістинг 16.5 обробляє несподівані виключення, а лістинг 16.6 формально відмовляється від відновлення виконання програми і завершує її.


 

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

9605. Концепция приемлемого риска 31.5 KB
  Концепция приемлемого риска Рассматриваемая концепция вызвана следующим парадоксом. С одной стороны, давно известно: кто не рискует, тот не выигрывает риск - благородное дело большой риск - большая выгода серьезных начинан...
9606. Цель и задачи риск-менеджмента 25 KB
  Цель и задачи риск-менеджмента В широком смысле управление предпринимательским риском основывается на концепции приемлемого риска и на возможности рационального воздействия на начальный уровень риска с целью его доведения до приемлемого значения...
9607. Модель риск-менеджмента 25 KB
  Модель риск-менеджмента В соответствии с методологией системного анализа риск-менеджмент может быть представлен как сложная многоуровневая управленческая система. Это обусловлено сложностью содержания предпринимательского риска как экономической ка...
9608. Технология риск-менеджмента 25.5 KB
  Технология риск-менеджмента базируется на представлении его как вида целенаправленной деятельности финансового менеджера и предусматривает структурирование процесса управления риском, т.е. выделение элементов принятия...
9609. Вивчення та випробування схеми випрямляча 128 KB
  Вивчення та випробування схеми випрямляча МЕТА-вивчення роботи напівпровідникових випрямлячів. Для випрямлення змінного струму, що змінюється за величиною та напрямом, використовуються різноманітні пристрої. Найпростішою є схема, зроблена на напівпровід...
9610. Визначення питомої теплоти фазового переходу першого роду при темпратурі кипіння 59 KB
  Визначення питомої теплоти фазового переходу першого роду при темпратурі кипіння Мета роботи -вивчення явища фазового переходупершогороду у процесах пароутворювання і конденсації води. Переход речовини з однієї фази до іншої може супрово...
9611. Визначення постійної дифракційної решітки 76 KB
  Визначення постійної дифракційної решітки. Мета: Визначити умови спостерігання дифракційних максимумів визначити довжину падаючого світлавизначити період дифракційної решітки. Обладнання: Лінійка на підставці, лазер, набір дифракційних решіток, шт...
9612. Зняття статистичних характеристик германієвого плоского тріоду. Визначення параметрів тріоду по статистичним характеристикам 24.5 KB
  Зняття статистичних характеристик германієвого плоского тріоду. Визначення параметрів тріоду по статистичним характеристикам. Мета роботи: вивчення роботи напівпровідникового тріоду та розрахунок параметрів плоского тріоду по його статистичним харак...
9613. Деякі джерела помилок та заходи по їх обліку або запобіганню 160 KB
  Вступ Однією з основних задач лабораторного практикуму, окрім сприяння кращому засвоєнню ідей та законів фізики, є виховання у студентів навичок самостійної практичної роботи та, насамперед, правильного виконання вимірів фізичних величин. Під час пр...