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.


 

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

76897. Оболочки и пространства мозга 183.61 KB
  В отверстиях основания твердая оболочка окружает и фиксирует проходящие через них сосуды и нервы. Паутинная оболочка состоит из волокнистой соединительной ткани покрытой эндотелием. Вблизи менингеальных синусов паутинная оболочка образует эти самые грануляции врастающие в просвет синусов и вен костного диплоетического вещества.
76898. Спинальные нервы 181.13 KB
  Спинномозговой нерв смешанный по составу волокон образуется: передним корешком двигательным из длинных отростков нейронов расположенных в ядрах передних рогов спинного мозга; отростки нейронов в составе нервов достигают органов где образуют нервные окончания исполнительного типа эффекторы; задним корешком и спинальным узлом дендриты псевдоуниполярных клеток которого составляют задний корешок и достигают задних рогов спинного мозга а длинные отростки этих клеток входят в состав спинальных нервов и их производных образуя в...
76899. Шейное сплетение 179.82 KB
  Ветви и области иннервации. Ветви подразделяются на кожные мышечные и смешанные короткие и длинные. В каждом сплетении правом и левом имеются следующие ветви.
76900. Плечевое сплетение. Ветви надключичной части плечевого сплетения, области иннервации 179.65 KB
  Источниками образования плечевого сплетения являются передние ветви четырех нижних шейных и 12го грудных спинномозговых нервов. Дорсальный нерв лопатки начинается из передней ветви V шейного спинального нерва. Подключичный нерв из пятой передней ветви проходит кпереди от подключичной артерии и заканчивается в одноименной мышце.
76901. Подключичная часть плечевого сплетения 183.27 KB
  Она имеет короткие нервы: дорсальный лопаточный длинный грудной подключичный над и подлопаточные грудоспинной которые иннервируют кожу мышцы шеи груди и надплечья. Нервные стволы сплетения вступившие в подмышечную яму обозначаются как подключичная часть которая окружает подмышечную артерию с трех сторон подковообразно и делится на медиальный латеральный и задний пучки дающие начало длинным и коротким нервам руки. Из латерального пучка C V C VIII начинаются латеральный грудной мышечнокожный нервы и латеральный корешок...
76902. Межреберные нервы, их ветви и области иннервации 180.98 KB
  Передние ветви грудных спинномозговых нервов образуют 11 пар межреберных нервов и 12ю пару подреберные нервы. Нервы в межреберном промежутке располагаются вместе с задними межреберными сосудами. Межреберные нервы ярко выражают метамерное расположение и сегментарную иннервацию кожи и мышц груди и живота реберной плевры и париетальной брюшины.
76903. Поясничное сплетение - строение, топография, нервы и области иннервации 180.18 KB
  Длинные нервы подвздошноподчревный подвздошнопаховый бедреннополовой запирательный бедренный латеральный кожный нерв бедра участвуют в иннервации кожи и мышц живота таза промежности и бедра. Его латеральная кожная ветвь иннервирует кожу ягодицы и бедра в верхнелатеральных отделах. Кроме того он снабжает кожу мошонки больших половых губ передней и медиальной поверхности бедра. Запирательный нерв для мышц таза и бедра.
76904. Крестцовое сплетение, его нервы и области иннервации 181.06 KB
  Источниками сплетения являются передние ветви IVVго частично поясничных и верхних четырех крестцовых спинномозговых нервов. При объединении с копчиковым сплетением в источники входят передние ветви пятого крестцового и копчикового спинальных нервов. Поясничнокрестцовый ствол возникает из части передней ветви IV поясничного и всей передней ветви V поясничного нервов.
76905. Седалищный нерв, его ветви. Иннервация кожи нижней конечности 182.03 KB
  Иннервация кожи нижней конечности. Седалищный нерв самый крупный и длинный в человеческом теле является смешанным нервом содержащим чувствительные двигательные и вегетативные волокна. Они происходят из передних ветвей IV V поясничных и первых трех крестцовых спинномозговых нервов.