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


 

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

22247. ВИДЫ ВЗАИМОЗАМЕНЯЕМОСТИ И ТОЧЬНОСТЬ. ВЗАИМОЗАМЕНЯЕМОСТЬ. РАЗМЕРЫ,ОТКЛОНЕНИЯ,ДОПУСКИ, ПОСАДКИ 85.5 KB
  Er = D r D er = d r d Предельные отклонения: Es = D max D верхнее предельное отклонение отверстия; еs = d max d верхнее предельное отклонение вала; ei = d min d нижнее предельное отклонение вала; EI = D min D нижнее предельное отклонение отверстия. TD = D max D min допуск отверстия; Td = d max d min допуск вала. Dm = D max D min Единица допуска является функцией номинального размера. С зазором S min = D min d max = EI es S max = D max d min = ES ei Частным случаем посадки с зазором...
22248. Метод групповой взаимозаменяемости 28.5 KB
  групповой зазор или натяг не обеспечивают однородности соединения так как он меняется при переходе от одной группы к другой при этом усложняются и удорожаются контрольные операции связи с тем что для такого отбора деталей требуется дополнительный измерительный инструмент. Создаются трудности при замене быстроизнашиваемых деталей. Решает следующие задачи: Устанавливает ответственные размеры и параметры деталей и узлов оказывают влияние на эксплуатационные показатели машин и на собираемость узлов. Уточняются номинальные величины...
22249. Расчет допусков размеров, входящих в размерные цепи 39 KB
  Составляющее звено звено размерной цепи изменение которого вызывает изменение исходного или замыкающего звена. Увеличивающие если с увеличением составляющего звена увеличивается размер исходного или замыкающего звена. Уменьшающие если с уменьшением составляющего звена уменьшается размер исходного или замыкающего звена. Компенсирующее звено предварительно выбранное звено размерной цепи изменение размера которого достигается требуемая точность замыкающего звена.
22250. Мониторинг в нейроанестезиологии и нейрореаниматологии 213 KB
  Мониторинг при операциях на стволе мозга Мониторинг при сосудистых операциях. Мониторинг в нейрореаниматологии оценка уровня сознания мониторинг витальных функций контроль ВЧД длительный контроль транскраниальная допплерография оценка метаболизма мозга Обеспечение безопасности больного находящегося в состоянии анестезии является одной из основных обязанностей анестезиолога. В нейрохирургии этот метод часто применяется при вмешательствах н сосудах головного мозга. Нейрофизиологический мониторинг Впервые регистрацию биоэлектрической...
22251. ТАКТИКА ВЕДЕНИЯ НАРУШЕНИЙ МОЗГОВОГО КРОВООБРАЩЕНИЯ 69.5 KB
  Частоту нарушений мозгового кровообращения НМК трудно установить так как определенное количество больных погибает вне клиники или не госпитализируется. Как бы то ни было НМК составляют около 5 объема скоропомощной практики. Сегодня подход к лечению НМК должен быть динамичным коллективным и мультидисциплинарным. Тактикой скоропомощного ведения пациента с подозрением на НМК кроме диагностики причины заболевания и оценки тяжести состояния должно быть срочное обеспече ние максимальной оксигенации головного мозга с целью минимизации...
22252. ОБЩИЕ ПРИНЦИПЫ ИНТЕНСИВНОЙ ТЕРАПИИ ПОСТРАДАВШИХ С СОЧЕТАНОЙ ЧЕРЕПНО-МОЗГОВОЙ ТРАВМОЙ 127 KB
  По данным к примеру клиники Военнополевой хирургии Военномедицинской академии за последние 10 лет частота поступления пострадавших с такой характеристикой повреждений составляет около . Анализ исходов течения травматической болезни у этой категории пострадавших свидетельствует о высокой степени неблагоприятных исходов напрямую коррелирующей с тяжестью ЧМТ степенью полисегментарности повреждения выраженностью шоковой реакции организма в целом. Интенсивная терапия пострадавших III группы нетяжелая ЧМТ и...
22253. ОСНОВНЫЕ ПРИНЦИПЫ ИНТЕНСИВНОЙ ТЕРАПИИ ТЯЖЕЛОЙ ЧЕРЕПНО-МОЗГОВОЙ ТРАВМЫ 124.5 KB
  et al: Blood pressure and intracranial pressurevolume dynamics in severe head injury: relationship with cerebral blood now. et al: Ultra early evaluation of regional cerebral blood flow in severely headinjured patients using xenon enhanced computed tomography. et al: Megadose steroids in severe head injury.: Longchain versus medium and longchain triglyceridebased fat emulsion in parenteral nutrition of severe head trauma patients.
22254. ПРОТОКОЛ ДЕЙСТВИЙ ПРИ МАССИВНОЙ ВОЗДУШНОЙ ЭМБОЛИИ 26.5 KB
  Удалить аортальную канюлюудалить воздух из места канюляции аорты. Удалить воздух из артериальной канюли и магистрали. Кровь нагнетается в ВПВ при температуре 20240 С со скоростью 12 л мин или более и воздух вместе с кровью дренируется к помпе из места канюляции в области корня аорты. Во время ретроградной перфузии через ВПВ периодически выполняется компрессия сонных артерий для эвакуации воздуха из позвоночных артерий ретроградным путем.
22255. Черепно-мозговая травма (ЧМТ) 48 KB
  Изучение расстройств дыхания при тяжелой ЧМТ важно прежде всего потому что развиваясь в остром периоде травмы дыхательная недостаточность ДН не только усугубляет тяжесть состояния больных но и является одной из причин летального исхода. Велико социальное значение ЧМТ. Оно обусловлено: преимущественным поражением лиц в возрасте до 50ти лет наиболее активных в социальном и трудовом отношении; как причина смертности и инвалидности у лиц молодого возраста ЧМТ опережает сердечнососудистые и онкологические заболевания; 3 полное...