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 формально відмовляється від відновлення виконання програми і завершує її.


 

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

8971. Традиционная теория познания и классическая философия 35 KB
  Традиционная теория познания и классическая философия Традиционная теория познания, следовавшая в своем развитии и функционировании образцам и критериям наиболее развитых естественных наук, в первую очередь физики, по существу, не вводила время, тем...
8972. Характеристики взаимодействия науки, экономики и власти 44 KB
  Характеристики взаимодействия науки, экономики и власти Отношения науки и экономики всегда представляли собой большую проблему. Наука не только энергоемкое предприятие, но и в огромной степени финансово затратное. Она требует огромных капиталовложен...
8973. Преднаука и Основания наук 59 KB
  Преднаука и Основания наук Особенностями восточной преднауки являлись: непосредственная вплетенность и подчиненность практическим потребностям (искусству измерения и счета - математика, составлению календарей и обслуживанию религиозных культов...
8974. Развитие форм научного мышления в средние века 33.17 KB
  Развитие форм научного мышления в средние века. Эпоху Средневековья относят к началу II в. н.э., а ее завершение к XIV—XV вв. В истории Европы этот период называют не иначе как мрачный, имея при этом в виду общий упадок цивилизации, крушение ...
8975. Становление развитой научной теории 39 KB
  Становление развитой научной теории. Роль теории в научном познании огромна. Теория как форма научного знания направлена на обнаружение закономерностей того или иного фрагмента действительности. В процессе построения научной теории задействованы сет...
8976. Историческая изменчивость механизмов порождения научного знания. 35 KB
  Историческая изменчивость механизмов порождения научного знания. Важнейшей характеристикой знания является его динамика, т. е. его рост, изменение, развитие и т. п. Эта идея, не такая уж новая, была высказана уже в античной философии, а Гегель сформ...
8977. Структура эмпирического знания 38.5 KB
  Структура эмпирического знания Само эмпирическое знание имеет довольно сложную структуру, в которой можно выделить четыре уровня: а) единичные эмпирические высказывания (протокольные предложения), которые фиксируют результаты единичных наблюдений....
8978. Структура теоретического знания 34 KB
  Структура теоретического знания Для выяснения специфики теоретического познания важно подчеркнуть, что теория строится с явной направленностью на объяснение объективной реальности, но описывает непосредственно она не окружающую действительность...
8979. Научная картина мира: ее функции и исторические формы 29 KB
  Научная картина мира: ее функции и исторические формы. НКМ (Степин) – целостная система представлений о мире, его структурных характеристиках и закономерностях, вырабатываемая в результате систематизации и синтеза в фундаментальных достижениях...