Загальні положення 4 Частина Основи мови С++ 9



Download 1,18 Mb.
bet36/37
Sana05.08.2022
Hajmi1,18 Mb.
#846530
1   ...   29   30   31   32   33   34   35   36   37
Bog'liq
Лабораторні роботи метод вказівки

Приклад рішення задачі
Див. проект «Task18».
Контрольні питання

  1. Що таке параметризація?

  2. Що таке і як використовуються родові класи?

  3. Що таке спеціалізація класу?

  4. Наведіть приклади використання родових класів?

  5. Коли зручно використовувати шаблонні функції?

  6. Що таке STL?

  7. Наведіть приклад використання контейнерів STL.

  8. Наведіть приклад використання алгоритмів STL.

  9. Наведіть приклад використання функторів.

  10. Вкажіть переваги параметрезованих контейнерів у порівнянні з непараметрізованими.



19 Виключення. Обробка помилок


Лабораторна робота №19
Мета: ознайомитися з механізмом обробки виключень в C++.
Індивідуальне завдання
При розробці проекту використовувати раніше обрану прикладну область та реалізовану функціональність.
Продемонструвати ефективність використання виключень для контролю за операціями збереження у файл і відновлення з файлу вмісту контейнерів.
При тестуванні продемонструвати розкручування стека – автоматичне знищення (виклик деструкторів) всіх стекових об’єктів між throw і catch.
Запропонувати спосіб звільнення пам’яті від динамічних об’єктів, які були створені до виникнення виключення.
Термінологія
Обробка виключень (exception handling) – виняткових ситуацій – дозволяє впорядкувати обробку помилок часу виконання. Використовуючи обробку виключень, програма може автоматично викликати функцію-обробник помилок тоді, коли така помилка виникає. Принциповою перевагою обробки виключень є те, що вона дозволяє автоматизувати велику частину коду для обробки помилок.
Базовий принцип, на якому заснована обробка виключень – відновлення стану і вибір альтернативних дій у разі помилки.
Обробка виняткових ситуацій забезпечує спосіб передачі управління та інформації в невизначену точку, де було висловлено бажання обробляти ситуації даного типу. Ситуації будь-якого типу можуть збуджуватися (throw) і перехоплюватися (catch). Для функції може бути перераховано безліч ситуацій, які можуть бути в ній порушені.
Реакція буде викликана тільки в разі виконання вираження збудження всередині блоку з контролем або у функціях, викликаних з цього блоку.
Синтаксис блоку з контролем :

try {...} <список реакцій>


Список реакцій являє собою наступну конструкцію:


catch (<оголошення ситуації>) {...}


[catch (<оголошення ситуації>) {...} ...]

Вираз збудження має наступний синтаксис:


throw <вираз>;


При порушенні ситуації (тобто виконанні оператора throw) управління передається на реакцію. Тип операнда оператора throw визначає, які реакції можуть перехоплювати дану ситуацію.


Якщо серед реакцій блоку з контролем не знайдено відповідної реакції, пошук реакції триває в блоці з контролем, що охоплює даний.
Якщо в програмі не знайшлося відповідної реакції, викликається функція terminate(). Функція terminate() викликає функцію, задану при останньому зверненні до функції set_terminate(). За замовчуванням функція, що викликається з функції terminate(), є abort(). Функція, що викликається функцією terminate(), повинна завершувати виконання програми.
Виключення є об’єктом деякого класу, який є представленням виняткового випадку. Код, що виявив помилку, генерує об’єкт інструкцій throw. Фрагмент коду висловлює своє бажання обробляти виключення за допомогою інструкції catch. Результатом генерації виключення інструкцією throw є розкручування стека до тих пір, поки не буде виявлений відповідний catch у функції, яка безпосередньо або опосередковано викликала функцію, що генерує виняток.
Сам факт генерації виключення передає інформацію про помилку і її тип. Крім того, виключення може містити додаткову інформацію. Фундаментальною метою техніки обробки винятків є передача інформації для відновлення після виникнень проблеми і для здійснення цього надійним і зручним способом.
Одна з принципових переваг стандартної схеми обробки виключень –розкручування стеку (unwinding the stack). При запуску виключення автоматично викликаються деструктори всіх стекових об’єктів між throw і catch.
Таким чином гарантується виклик деструкторів всіх стекових об’єктів, сконструйованих з початку виконання try-блоку. Це може знадобитися для закриття відкритих файлів, запобігання витоку пам’яті etc. Проте, справа не обходиться без деяких нюансів.
Якщо під час конструювання об’єкта відбудеться виключення, деструктори будуть викликані для тих компонентів (базових класів і змінних), конструктори яких були виконані до моменту виникнення винятку.

Download 1,18 Mb.

Do'stlaringiz bilan baham:
1   ...   29   30   31   32   33   34   35   36   37




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish