Презентация exceptions-SPP
- Размер: 262 Кб
- Количество слайдов: 17
Описание презентации Презентация exceptions-SPP по слайдам
1 Проф. Куссуль Н. М. Виключення
2 Механізм виключень Механізм обробки помилок (або виняткових ситуацій, виключень— exception handling) вбудовано в мову C++. Дозволяє коректно обробляти помилки, що виникають в процесі роботи програми. За його допомогою при виникненні помилки може бути автоматично викликана процедура її обробки.
3 Механізм виключень Принципова перевага такого підходу полягає в тому, що він дозволяє автоматично, в залежності від ситуації, запускати одну з багатьох функцій обробки помилок, які попередньо «вручну» вбудовуються в основну програму. Належним чином запрограмована обробка виняткових ситуацій допомагає створювати дійсно відмовостійкі програми.
4 Try-catch-throw Обробка виняткових ситуацій в мові C++ організується за допомогою трьох ключових слів: try catch та throw. Оператори програми, під час виконання яких потрібно забезпечити обробку виняткових ситуацій, розташовуються в блоці try.
5 Try-catch-throw Якщо виняткова ситуація (тобто помилка) виникає всередині блоку try , вона «збуджується» (ключове слово throw ), перехоплюється (ключове слово catch ) та обробляється. Функції, що викликаються в блоці try , також можуть збуджувати виняткову ситуацію. Будь-яка виняткова ситуація повинна перехоплюватися інструкцією catch, що розташовується безпосередньо за відповідним блоком try.
6 Try-catch-throw try { // блок генерації виняткової ситуації } catch ( type 1 arg ) { // блок перехоплення виняткової ситуації } catch ( type 2 arg ) { // блок перехоплення виняткової ситуації }
7 Throw throw ; Інструкція throw повинна виконуватися або усередині блоку try , або в будь-якій функції, що викликається у цьому блоці.
8 Завершення програми При генерації виняткової ситуації, для якої немає відповідної інструкції catch , може відбутися аварійне завершення програми. Якщо компілятор відповідає стандарту C++, то генерація необроблюваної виняткової ситуації приведе до виклику стандартних бібліотечних функцій unexpected () та terminate (). За замовчуванням для завершення програми функція terminate () викликає функцію abort (), однак при необхідності можна задати власну процедуру завершення програми.
9 Приклад void func() { try {throw 1; } catch(int a) { cout << "Caught excep numb: " << a << endl; return; } cout << "No exception detected!" << endl; return; } Caught exception number: 1 void func() { try { // throw 1; } catch(int a) { cout << "Caught excep numb: " << a << endl; return; } cout << "No exception detected!" << endl; return; } No exception detected!
10 throw My Class(); catch ( My Class &d) {}; catch Ловить дані будь-якого типу, змінну вказувати не обов’язково catch(dumbclass) { } //коректно catch(dumbclass&) { } //коректно catch(. . . ) { } //”зловити” всі виключення
11 Створення виключення double mean(double a, double b ) throw(char *); double multi ple. E rr ors. Function (double z) throw(char *, double); double simple(double z) throw (); // не генерує виключень catch (char* s) { c out << "Exception caught in inner loop. “ << ; throw; //перенаправлення до зовнішнього блоку try }
12 Приклад int main() { int a; char* b = «test string for exception generation»; cout << "Begining. . . " << endl; //cout <> a; cout << "Inside try block" << endl; if(!a) throw 10; // Генерація виключення 10 if(a == -1) throw 10. ; // Генерація виключення 10. else throw b; // Генерація виключення зі строковим ідентифікатором cout << "This statement can't to be executed"; }
13 Приклад catch (int i) { // Оброблювач 1 cout << " E rror with number: "; cout << i << endl; } catch (char* b) { // Оброблювач 2 cout << " String e rror: "; cout << b << endl; } catch(. . . ) { // Узагальнений оброблювач cout << " Unknown error 10. !" << endl; cout << "Program finished. . . "; } getch(); return 0; }
14 try { throw; // ни один оператор, следующий далее (до //закрывающей скобки) // выполнен не будет } catch(. . . ) { cout << "Исключение!" << endl; }
16 Розгортання стеку а 1 а 3 а 2 b 1 b 2 Start Endfunc A(){ a 1, a 2, a 3; func B(){ b 1, b 2; } }
17 Стандартні виключення
18 Макрос assert ( assert. h ) дозволяє виконувати у програмі перевірку тверджень (assertion). Даний макрос корисний для швидкого включення діагностики в програми. Якщо значення виразу expression assert ( expression ) при його виконанні є false (0) , то до стандартного потоку буде виведено повідомлення: Assertion failed: expression , file xyz , line nnn а програма буде завершена аварійно. У повідомленні про помилку xyz — це ім’я файлу з кодом програми, nnn — номер рядка у цьому файлі, що містить оператор assert.