» Главная
eXcode.ru » Статьи » С / С++ » Система
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 26





Обработка исключений




Содержание статьи:

1) Введение.
2) Инициирование исключений.
3) Синтаксис перехвата исключений.
4) Многоуровневые исключения и выполнение программы после обработки исключения.

Введение.

Привет всем. Как видите, я сподобился на ещё одну статью по С++. Будет она посвящена исключениям. Нет-нет, не исключениям из правил, а системе управления поведением программы, при возникновении некорректных ситуаций в процессе её [программы] выполнения. Как такие ситуации перехватывались в старом добром С? Просто писали (например):

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

int *ptr;
ptr = ( int * )malloc( 4 );
if( ptr ){
printf(“A-a-a-a-a-a!!!”);
getch();
exit( 0 );
}

</td></tr></table>

Сейчас же, когда программы стали очень большими и навороченными, просто выхода из программы по exit’у не достаточно. Надо хотя бы освободить ресурсы (помимо этого мы можем захотеть сделать что-нибудь ещё). Можно конечно передавать всем функциям, которые у нас есть механизм корректного завершения программы, но есть способ лучше: вызывать функцию наподобие SendMessage, а затем засесть за написание огромного обработчика ВСЕХ возможных исключительных ситуаций. Представляете, какой получится монстр? Правильно мыслите – есть способ ещё лучше! Использование исключений!

Инициирование исключений.

Инициирование осуществляется с помощью секции throw.
<i>
void f( void ) {
throw( 1.1 );
}
</i>
throw могут передаваться любые типы данных: стандартные типы данных, типы данных, определенные пользователем, указатели, перечисления, объекты классов и структур.

Синтаксис перехвата исключений.

Для перехвата исключения необходимо блок, в котором оно возникает поместить в секцию try, а затем поставить несколько секций catch в которых вызванные исключения будут обрабатываться.

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
char Number[100];
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch( int i ){
MessageBox( 0 , _gcvt( i , 9 , Number ) , 0 , 0 );
}
catch( double d ){
MessageBox( 0 , _gcvt( d , 9 , Number ) , 0 , 0 );
}
}

</td></tr></table>

В данном случае у нас две секции catch. В одной обрабатываются исключении с типом int, а в другой с типом double. Если же Вам хочется написать для всех типов один обработчик, то это можно сделать следующим способом:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
char Number[100];
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch(...){
MessageBox( 0 , 0 , 0 , 0 );
}
}

</td></tr></table>

Многоуровневые исключения и выполнение программы после обработки исключения.

Если в блоке try не было инициировано ни одного исключения, то все обработчики будут проигнорированы и выполнение программы продолжится, если же исключение было вызвано, то выполняется код соответствующего обработчика (из всего списка определённых обработчиков будет выполнен только он), после чего либо продолжится выполнение программы, либо в обработчике будет инициировано новое исключение:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
try{
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch(...){
MessageBox( 0 , "..." , 0 , 0 );
throw ( NULL );
}
}
catch( int ){
MessageBox( 0 , 0 , 0 , 0 );
}
}

</td></tr></table>

Такая обработка исключений возможна, но я настоятельно рекомендую использовать её как можно реже.

источник savardge.narod.ru
К началу статьи





Добавил: MadvEXДата публикации: 2005-07-09 16:52:14

Рейтинг статьи:3.33 [Голосов 6]Кол-во просмотров: 111639
Оцените статью:

Комментарии читателей

Всего комментариев: 3987

2018-02-25 01:27:54
ManszaSit
Вы в ищите компанию, которая соорудит вам автомойку самообслуживания под ключ? Есть интерес сделать автомойку, которую отважно реально назвать молодой быстроразвивающейся компанией? В этом случае вы на корректном пути!

В этот период эпоха информационных технологий. В связи с этим каждая организация хочет создать что-то крутое. Сегмент рынка очень совершенствуется.

Обслуживание не стоят на месте. У тебя тоже есть возможность начать применять передовые услуги. Для этого вы имеете возможность обратиться в фирму WASHERCAR, которая поможет в [url=http://washercar.com/]мойка самообслуживания под ключ цена фото[/url] . У фирмы есть большой опыт работы.

Администраторы имеют шанс предоставить вам вероятность выбрать: выкупить готовую автомойку самообслуживания или построить мойку самообслуживания под определённые требования.
Бесконтактные автомойки самообслуживания – это перспективное направление, которое захватит будущее в этой отрасли. Фирму, которую вы имеете шанс посмотреть на washercar.com, может предложить вам франшизу.

2018-02-24 08:05:30
ReponMeX
Купить сочную римску пиццу в Москве сейчас тяжело. Но, мы захотели пропиарить сайт, где вы имеете шанс приобрести сочную венецианскую пиццу в столице.

Пицца сервис, который лично выпекает [url=https://avepizza.ru]ссылочка[/url] , очень популярен. Вы имеете возможность оформить заказ на вегетарианскую или мексиканскую пиццу и вам сделают её очень быстро. Поставка занимает не более 45 минут.

Оформить заказ на пиццу можно на avepizza.ru, где находится большое количество скидочных вариантов.

AvePizza доставит сочную пиццу в Москве к вам в частный дом или в офис. Пицца готовится сотрудниками, которые есть спецами в их секторе. В этой связи, пиццерия уже успела завоевать доверие у москвичей и иностранцев. Заказать пиццу реально через виртуальную платформу на портале.

Также есть возможность оформить заявку и через телефон, который указан на сайте.

2018-02-18 05:40:13
abtaHeks
Существуют ли аналоги?

---
Разрешите помочь Вам? скачать игру fifa 15 на компьютер бесплатно, скачать fifa 15 2015 а также [url=http://15fifa.ru/skachat-fifa-15/12-skachat-demo-versiyu-fifa-15-besplatno.html]скачать fifa 15 demo[/url] скачать fifa 15 на андроид pdalife

2018-02-18 04:57:20
abtaSok
Вы правы, не самое удачное время

---
Вы допускаете ошибку. Пишите мне в PM, обсудим. скачать fifa 15 без вирусов, fifa 15 скачать торрент pc полная а также [url=http://15fifa.ru/]еа спортс[/url] скачать фифа 15 прямая ссылка на пк

2018-02-14 10:16:54
ZloyKarlik
Дорогие игроки!

Бесплатная игра «Легенда: Наследие Драконов» принадлежит к жанру онлайн фэнтези MMORPG (Massively Multiplayer Online Role-Playing Game).
Любой желающий может войти в игру, примкнув к одной из враждующих сторон – магмарам или людям, и погрузиться в неистовую битву.



[img]http://w1.dwar.ru/images/locale/ru/images/banners/dwar_315x19_refbutton_5.jpg[/img]
Ссылка для регистрации в игре - http://ctls.ru/dwarzloy СТАНЬ ЛЕГЕНДАРНЫМ ГЕРОЕМ!

Подбирая подходящие виды доспехов и оружия, вы сумеете «прокачать» своего персонажа и превратить его в «костолома»,
обладающего необычайно мощными ударами, «тяжеловеса», чья жизненная сила крайне велика, или «ловкача», который с
легкостью увернется от вражеских атак. При этом ваш выбор не будет окончательным и бесповоротным. Если во время
игры вы предпочтете сменить класс персонажа, то сможете сделать это, выбрав для него другое облачение.


НОВОСТИ ИГРЫ:



КВар: Высший Дивизион. 11 сезон, 7 выпуск
07.02.18 13:00:00

Клановые битвы Высшего Дивизиона близятся к завершению: участники уже не могут перемещаться между Золотой,
Серебряной и Бронзовой лигами. А потому сражения за первенство внутри них приобретают особый накал и размах.

Летописцы подготовили свежий обзор самых значимых сражений недели и, учтя пожелания игроков, сделали особый
акцент на боях Серебра и Бронзы. Столкновения в этих лигах, оттененные блеском Золота в прошлых выпусках,
теперь не останутся незамеченными!

Читайте КВар, делитесь мнениями и побеждайте в битвах!

КВар: Высший Дивизион. 11 сезон, 7 выпуск (кликабельно)

Внимание!
Призовой фонд на данный момент составляет 79 130 золотых.

2018-02-14 03:50:17
SergDiplomatFub
Уважаемые пользователи, друзья!


Всего три практичных шага и мы у цели!
Первый шаг - Подбор нужной вакансии с достойной з/п. Сбор сведений о требованиях к документам соискателя.
Второй шаг - Заказываем изготовление пакета необходимых документов.

[url=http://diplom02rus.ru/svidetelstvo/]Купить свидетельство в Уфе[/url] #diplom02rus.ru
Третий шаг - Приходим на собеседование, естественно впечатляем работодателя своими регалиями в виде пакета доков(дипломы, свидетельства,удостоверения и т.п.) - разумеется получаем заветную должность и радуемся жизни.
Профит!
Оформляем документы, покупаем дипломы и пр. нужную документацию тут - INFO@diplom02rus.RU (не сочтите за рекламу)

2018-02-08 11:54:58
GarlandUrist
Доброе утро!!

После прочтения буду работать над своим сайтом.
Ниже представлены основные наши тарифы по продвижению сайтов.
После регистрации в системе добавляем сайт, присваиваем регион и добавляем продвигаемые запросы. ЧИТАТЬ >>> [url=https://bazyforumov.blogspot.com.by/2018/02/html_8.html]now[/url]

2018-02-08 11:54:54
GarlandUrist
Доброе утро!!

После прочтения буду работать над своим сайтом.
Ниже представлены основные наши тарифы по продвижению сайтов.
После регистрации в системе добавляем сайт, присваиваем регион и добавляем продвигаемые запросы. ЧИТАТЬ >>> [url=https://bazyforumov.blogspot.com.by/2018/02/html_8.html]now[/url]

2018-02-06 16:19:16
ZloyKarl
Дорогие игроки!

Рады Вам сообщить приятную и для многих долгожданную новость!

[img]http://vuzdiplom.xyz/wp-content/uploads/2018/02/pv.png[/img]

ВНИМАНИЕ! АКЦИЯ!
Если ваш реферал, зарегистрировавшийся в игре и прошедший проверку на
вторичного персонажа, достигнет 5 уровня, вы и ваш реферал получите 100 и 100 жетонов Мецената!
Акция продлится до 25 Февраля!!!
Удачной игры!

http://vuzdiplom.xyz/game

2018-02-06 09:27:50
CCBuheffedo
[url=http://casino-center.cc/][img]http://images.vfl.ru/ii/1516597776/e79f2363/20255057.jpg[/img][/url]
Зачем вообще подставлять голых телок вместо моего фото http://casino-center.cc/
Не работает ссылка [url=http://casino-center.cc/]blog.excode.ru/user/7112[/url]
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Как вы относитесь к спаму?
Положительно, Я сам спамер.
11% (21)
Безразлично
11% (21)
Нормально, сам бы спамил
6% (11)
Отрицательно
67% (129)
А ЧТО, ЕСТЬ СПАМ ...
6% (11)

Проголосовало: 193
Разработали новый процессор на женской логике, обрабатывающий четыре логических значения: "Ни да, ни нет", "И да, и нет", "Три раза нет!" и "Нет, и не проси!!!"
Рейтинг: 9.2/10 (13)
Посмотреть все анекдоты