Синтаксис виключень

 

Ключове слово try слугує для позначення контрольованого блоку – код, в якому може генеруватися виключення. Блок береться у фігурні дужки:

 

try

{

 

}

 

Всі функції, які прямо або побічно викликаються з try-блока, також вважаються такими, що належать цьому блоку.

Генерація (породження) виключення відбувається по ключовому слову throw, яке вживається або з параметром, або без нього:

 

throw [ вираз ];

 

Тип виразу, що стоїть після throw, визначає тип породжуваного виключення. При генерації виключення виконання поточного блоку припиняється, і відбувається пошук відповідного обробника і передача йому управління. Як правило, виключення генерується не безпосередньо в try-блоці, а у функціях, прямо або побічно в нього вкладених. Не завжди виключення, що виникло у внутрішньому блоці, може бути відразу правильно оброблено. В цьому випадку використовуються вкладені контрольовані блоки, і виключення передається на вищий рівень за допомогою ключового слова throw без параметрів.

Обробники виключень починаються з ключового слова catch, за яким в дужках слідує тип оброблюваного виключення. Вони повинні розташовуватися безпосередньо за try-блоком. Можна записати один або декілька обробників відповідно до типів оброблюваних виключень. Синтаксис обробників нагадує визначення функції з одним параметром – типом виключення.

Існує три форми запису:

 

catch(тип ім’я) { ... /* тіло обробника */ }

catch(тип){ ... /* тіло обробника */ }

catch(...){ … /* тіло обробника */}

 

Перша форма застосовується, коли ім'я параметра використовується в тілі обробника для виконання яких-небудь дій – наприклад, виведення інформації про виключення. Друга форма не припускає використання інформації про виключення, грає роль тільки його тип. Багатокрапка замість параметра означає, що обробник перехоплює всі виключення. Оскільки обробники є видимими в тому порядку, в якому вони записані, обробник третього типу слід поміщати після всіх останніх. Приклад:

 

catch(int i)

{

... // Обробка виключень типу int

}

catch(const char *)

{

... // Обробка виключень типу const char*

}

catch(Overflow)

{

... // Обробка виключень класу Overflow

}

catch(...)

{

... // Обробка всіх необслужених виключень

}

 

Після обробки виключення управління передається першому операторові, що знаходиться безпосередньо за обробниками виключень. Туди ж, минувши код всіх обробників, передається управління, якщо виключення в try-блоці не згенерувало.








Дата добавления: 2014-12-26; просмотров: 1012;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.