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.


 

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

28814. Распад СССР. Становление суверенной России 16.01 KB
  Представители русского населения в Верховном Совете СССР создали фракцию Союз отстаивая права русского населения в союзных республиках которое непременно пострадало бы и пострадало в случае распада СССР.Начавшееся потепление в отношениях с Западом шло лишь за счет уступок со стороны СССР в 1989 г. СССР терял статус великой державы.
28815. Дайте сравнительный анализ программам политических партий в России в начале 20в. 15.01 KB
  Умеренноконсервативноекрыл о возглавляла партия октябристов Союз 17 октября. названа в честь Манифеста 17 октября. Программные цели: дальнейшее развитие политических свобод дарованных Манифестом 17 октября идеал ограниченная конституционная монархия.
28816. Февральская революция и падение монархии. В чем сущность новой власти, возникшей в России после Февраля 15.2 KB
  В сложившейся обстановке правительство и сам царь проявили неспособность к быстрым и решительным действиям. Правительство было тесно связано с буржуазными общественными организациями возникшими в годы войны Всероссийский земский союз Городской союз Центральный военнопромышленный комитет. В своей Декларации Временное правительство объявило амнистию политическим заключённым гражданские свободы замену полиции народной милицией реформу местного самоуправления.
28817. Какие альтернативы открывались перед страной после Февральской революции? Почему они не были реализованы? В чем причины победы большевиков в октябре 1917г. 18.82 KB
  решающий перевес был на стороне Советов большевиков. Корнилов смог установить свою власть в стране; однородносоциалистическую если бы была выполнена резолюция II Съезда Советов о создании правительства из представителей всех социалистических партий; большевистсколеворадикальную с приходом к власти большевиков началась реализация этой модели общественного развития России. Нерешительные попытки Керенского избавиться от наиболее ненадёжных частей Петроградского гарнизона приводят только к тому что они дрейфуют влево и переходят на...
28818. Как происходило становление советской политической и социально-экономической системы? Деятельность большевистской партии и советского правительства в 1917-1920гг. 20.72 KB
  Власть и командные высоты в экономике крупная и средняя промышленность внешняя торговля финансовая системы транспорт оставались в руках большевиков которые не отказывались от конечной цели социализма шли к ней не прямым политики военного коммунизма а обходным путем с помощью товарноденежных отношений. Реальная политическая власть принадлежала Президиуму ВЦИК и Совету народных комиссаров СНК который присвоил себе не только исполнительную но и законодательную власть. Особое внимание уделялось формированию аппарата...
28819. Объясните название и сущность политики военного коммунизма 14.24 KB
  Решение о прекращении военного коммунизма было принято 21 марта 1921 года на X съезде РКПб и введен НЭП. Политика военного коммунизма включала комплекс мероприятий затронувших экономическую и социальнополитическую сферу. Основой военного коммунизма были чрезвычайные меры в снабжении городов и армии продовольствием свертывание товарноденежных отношений национализации всей промышленности включая мелкую продразверстка снабжение населения продовольственными и промышленными товарами по карточкам всеобщая трудовая повинность и...
28820. Каковы причины, особенности и последствия гражданской войны в России 15.36 KB
  В ходе Гражданской войны от голода болезней террора и в боях погибло по различным данным от 8 до 13 млн человек в том числе около 1 млн бойцов Красной Армии. Эмигрировало из страны до 2 млн человек. По одним данным в 1921 году в России насчитывалось 45 млн беспризорников по другим в 1922 году было 7 млн беспризорников.
28821. На каких принципах был построен СССР в 1922г? Какие альтернативные варианты объединения обсуждались 14.64 KB
  I съезд Советов СССР утвердил Декларацию и Договор об образовании Союза Советских Социалистических республик. II съезд Советов СССР принял первую Конституцию СССР она состояла из Декларации и Договора об образовании СССР. Конституция признавала республики суверенными государствами с правом свободного выхода из Союза внесения в свои конституции изменений в соответствии с Конституцией СССР.
28822. Какое значение имел НЭП для социалистического строительства? Почему он был свернут 20.45 KB
  Достижения нэпа значительны: к 1925 г. Вместе с тем успехи нэпа не следует преувеличивать. Противоречия нэпа проявлялись в: экономике техническая отсталость промышленности высокие темпы ее восстановления острая потребность в обновлении производственных мощностей нехватка капиталов внутри страны. невозможность широкого привлечения иностранных капиталовложений абсолютное преобладание мелких полунатуральных крестьянских хозяйств на селе; социальной сфере усиление неравенства неприятие нэпа значительной частью рабочего класса и...