Презентация exceptions-SPP

Скачать презентацию  exceptions-SPP Скачать презентацию exceptions-SPP

exceptions-spp.ppt

  • Размер: 262 Кб
  • Количество слайдов: 17

Описание презентации Презентация exceptions-SPP по слайдам

  1 Проф. Куссуль Н. М. Виключення 1 Проф. Куссуль Н. М. Виключення

2 Механізм виключень Механізм обробки помилок (або виняткових ситуацій, виключень— exception handling) вбудовано в мову C++.2 Механізм виключень Механізм обробки помилок (або виняткових ситуацій, виключень— exception handling) вбудовано в мову C++. Дозволяє коректно обробляти помилки, що виникають в процесі роботи програми. За його допомогою при виникненні помилки може бути автоматично викликана процедура її обробки.

3 Механізм виключень Принципова перевага такого підходу полягає в тому, що він дозволяє автоматично, в залежності3 Механізм виключень Принципова перевага такого підходу полягає в тому, що він дозволяє автоматично, в залежності від ситуації, запускати одну з багатьох функцій обробки помилок, які попередньо «вручну» вбудовуються в основну програму. Належним чином запрограмована обробка виняткових ситуацій допомагає створювати дійсно відмовостійкі програми.

4 Try-catch-throw Обробка виняткових ситуацій в мові C++ організується за допомогою трьох ключових слів:  try4 Try-catch-throw Обробка виняткових ситуацій в мові C++ організується за допомогою трьох ключових слів: try catch та throw. Оператори програми, під час виконання яких потрібно забезпечити обробку виняткових ситуацій, розташовуються в блоці try.

5 Try-catch-throw Якщо виняткова ситуація (тобто помилка) виникає всередині блоку try , вона  «збуджується» (ключове5 Try-catch-throw Якщо виняткова ситуація (тобто помилка) виникає всередині блоку try , вона «збуджується» (ключове слово throw ), перехоплюється (ключове слово catch ) та обробляється. Функції, що викликаються в блоці try , також можуть збуджувати виняткову ситуацію. Будь-яка виняткова ситуація повинна перехоплюватися інструкцією catch, що розташовується безпосередньо за відповідним блоком try.

6 Try-catch-throw try { // блок генерації виняткової ситуації } catch ( type 1  arg6 Try-catch-throw try { // блок генерації виняткової ситуації } catch ( type 1 arg ) { // блок перехоплення виняткової ситуації } catch ( type 2 arg ) { // блок перехоплення виняткової ситуації }

7 Throw throw  значення, що ідентифікує виключення ; Інструкція throw повинна виконуватися або усередині блоку7 Throw throw ; Інструкція throw повинна виконуватися або усередині блоку try , або в будь-якій функції, що викликається у цьому блоці.

8 Завершення програми При генерації виняткової ситуації, для якої немає відповідної інструкції catch , може відбутися8 Завершення програми При генерації виняткової ситуації, для якої немає відповідної інструкції catch , може відбутися аварійне завершення програми. Якщо компілятор відповідає стандарту C++, то генерація необроблюваної виняткової ситуації приведе до виклику стандартних бібліотечних функцій unexpected () та terminate (). За замовчуванням для завершення програми функція terminate () викликає функцію abort (), однак при необхідності можна задати власну процедуру завершення програми.

9 Приклад void func() {  try  {throw 1; }  catch(int a)  {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  Ловить дані будь-якого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 rr11 Створення виключення 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; cout12 Приклад 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 rror13 Приклад 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;  // ни один оператор, следующий далее (до //закрывающей скобки) // выполнен14 try { throw; // ни один оператор, следующий далее (до //закрывающей скобки) // выполнен не будет } catch(. . . ) { cout << "Исключение!" << endl; }

16 Розгортання стеку а 1 а 3 а 2 b 1 b 2 Start Endfunc A(){16 Розгортання стеку а 1 а 3 а 2 b 1 b 2 Start Endfunc A(){ a 1, a 2, a 3; func B(){ b 1, b 2; } }

17 Стандартні виключення  17 Стандартні виключення

18 Макрос assert ( assert. h ) дозволяє виконувати у програмі перевірку тверджень (assertion). Даний макрос18 Макрос assert ( assert. h ) дозволяє виконувати у програмі перевірку тверджень (assertion). Даний макрос корисний для швидкого включення діагностики в програми. Якщо значення виразу expression assert ( expression ) при його виконанні є false (0) , то до стандартного потоку буде виведено повідомлення: Assertion failed: expression , file xyz , line nnn а програма буде завершена аварійно. У повідомленні про помилку xyz — це ім’я файлу з кодом програми, nnn — номер рядка у цьому файлі, що містить оператор assert.