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


 

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

71582. Установки для вакуумного напыления (ВН) покрытий (Пк) 145 KB
  Многолучевая интерферометрия применяется для измерения hпк непрозрачных Пл и основана на наблюдении в микроскоп интерференционных полос возникающих при рассмотрении в монохроматическом свете двух Пв расположенных под углом друг к другу. Под микроскопом сдвиг интерференционных полос l...
71583. ДУГОВОЙ НАГРЕВ ПРИ ТВИ 119 KB
  На НМ 5 - анод подается «+» от ИП 2 высокого напряжения - для его ЭЛ нагрева на начальной стадии процесса и от ИП 3 низкого напряжения - для поддержания ДР 6 после его зажигания. Электронный луч не только плавит и испаряет НМ, но и ионизирует поток пара...
71584. Механизм зарождения и формирования покрытия 110.5 KB
  Одним из основных процессов, определяющих структуру покрытия, является гетерогенное зародышеобразование, которое начинается с того, что на НП возникают скопления атомов. Силы химической связи стремятся сблизить эти атомы в положения, соответствующие параметрам...
71585. ТЕОРИЯ ВАКУУМНОГО НАПЫЛЕНИЯ 94 KB
  Для описания таких молекулярных потоков были использованы законы Ламберта из оптики и получены законы Ламберта-Кнудсена для ТВИ: интенсивность пара в направлении, которое отклоняется от нормали к поверхности испарения на угол...
71586. АБСОЛЮТНОСТЬ И ОТНОСИТЕЛЬНОСТЬ ПРАВООТНОШЕНИЯ ГРАЖДАНСКО-ПРАВОВОЙ ОТВЕТСТВЕННОСТИ 71 KB
  Теория и гражданский закон в зависимости от основания возникновения разделяют ответственность на два вида: договорную и внедоговорную (деликтную). По критерию дифференциации — структуре межсубъектной связи — эта классификация вполне соответствует...
71587. К ВОПРОСУ О НОРМАТИВНОМ ОСНОВАНИИ АДМИНИСТРАТИВНОЙ ОТВЕТСТВЕННОСТИ 117.5 KB
  Под нормативным основанием административной ответственности в науке понимается система административно-деликтных законов устанавливающих административную ответственность материально-правовая основа и регулирующих производство по делам об административных правонарушениях...
71588. СОДЕРЖАНИЕ ПРАВООТНОШЕНИЯ, ОБЕСПЕЧИВАЮЩЕГО НЕПРИКОСНОВЕННОСТЬ ЛИЧНОСТИ 167 KB
  Если международным договором Российской Федерации установлены иные правила чем предусмотренные законом то применяются правила международного договора. А часть 1 статьи 17 Конституции гласит: В Российской Федерации признаются и гарантируются права и свободы человека и гражданина согласно...
71589. ИСТОЧНИКИ (ФОРМЫ) НАЛОГОВОГО ПРАВА РОССИИ 126 KB
  Нормы международного права и международные договоры Российской Федерации. Специальное налоговое законодательство в Налоговом кодексе оно именуется законодательством о налогах и сборах которое в свою очередь включает следующие элементы: а федеральное законодательство...
71590. К ВОПРОСУ ОБ ОБЪЕКТЕ ГРАЖДАНСКО-ПРАВОВЫХ ОБЯЗАТЕЛЬСТВ В МЕДИЦИНСКОМ ОБСЛУЖИВАНИИ НАСЕЛЕНИЯ 89.5 KB
  Наиболее дискуссионным в теории правоотношений и в частности гражданских правоотношений всегда был и остается вопрос об объектах правоотношений. В качестве объектов правоотношений рассматриваются во-первых предметы материального мира вещи и невещественные материальные...