Клас exception. Використання класу для обробки виключних ситуацій
Зміст
- 1. Клас exception. Загальні відомості
- 2. Приклад генерування простого виключення класу exception
- 3. Приклад розробки функції, яка використовує клас exception для генерування виключення що може виникати у випадку, якщо квадратне рівняння не має розв’язку
- Споріднені теми
Пошук на інших ресурсах:
1. Клас exception. Загальні відомості
Стандартна бібліотека C++ надає в користування клас exception для обробки виключних ситуацій. Щоб використовувати можливості класу exception потрібно підключити заголовок <exception>
#include <exception>
Клас має приблизно такий опис:
class exception { public: exception() throw(); exception(const bad_exception& ob) throw(); virtual ~exception() throw(); exception &operator=(const exception& ob) throw(); virtual const char* what() const throw(); };
Клас exception є базовим для всіх виключних ситуацій, визначених в стандарті C++. Кожна виключна ситуація описується визначеним класом. Нижче наведено перелік важливих класів, які успадковані з класу exception:
- клас bad_alloc, який генерує виключну ситуацію у випадку невдалої спроби виділення пам’яті оператором new;
- клас bad_typeid, який генерує виключну ситуацію при невдалому виконанні оператора typeid;
- клас bad_cast, який генерує виключну ситуацію при невдалому динамічному приведенні типів.
У кожному з успадкованих класів є функція what(), яка повертає покажчик на рядок, який завершується символом ‘\0’. Саме через цю функцію можна отримувати рядок з поясненням причини виникнення тієї чи іншої виключної ситуації.
⇑
2. Приклад генерування простого виключення класу exception
У прикладі демонструється штучне генерування та перехоплення виключення типу exception. За подібним зразком можна розробляти класи, функції які описують (реалізують) власну унікальну систему виключень.
#include <iostream> #include <exception> using namespace std; // Клас exception, приклад генерування простого виключення void DemoException() { try { std::exception err("My error"); // створити об'єкт throw err; // згенерувати виключення } catch (std::exception& error) { std::cout << error.what() << endl; } } void main(void) { DemoException(); return; }
Результат роботи програми
My error
⇑
3. Приклад розробки функції, яка використовує клас exception для генерування виключення що може виникати у випадку, якщо квадратне рівняння не має розв’язку
Пропонується функція, яка розв’язує квадратне рівняння на основі вхідних коефіцієнтів a, b, c. Як відомо, при деяких значеннях a, b, c неможливо отримати розв’язок рівняння. З метою демонстрації функція генерує виключення, якщо квадратне рівняння не має коренів. Для генерування виключення використовується клас exception.
#include <iostream> #include <exception> // потрібно для використання класу exception using namespace std; // Приклад перехоплення виключення відсутності розв'язку // квадратного рівняння у функції. // Параметри функції: // - a, b, c - коефіцієнти рівняння a*x^2 + b*x + c = 0; // - x1, x2 - розв'язки рівняння. // Функція повертає true, якщо розв'язок існує, // в противному випадку функція повертає false. bool DemoSquareEquation(double a, double b, double c, double& x1, double& x2) { // 1. Додаткові внутрішні змінні double D; // дискримінант // 2. Обчислити дискримінант D = b * b - 4 * a * c; // 3. Обробка значення D try { if (D < 0) // Якщо рівняння не має розв'язку { // То згенерувати виключення // 3.1. Створити об'єкт error типу exception exception error("The equation has no roots"); // 3.2. Згенерувати виключення throw error; } } catch (exception& e) { // 3.3. Вивести результат виключення cout << e.what() << endl; return false; } // 4. Якщо рівняння має розв'язок, то отримати та повернути результат x1 = (-b - sqrt(D)) / (2 * a); x2 = (-b + sqrt(D)) / (2 * a); // 5. Повернути результат return true; } void main(void) { // 1. Оголосити внутрішні змінні double x1, x2; // 2. Виклик функції DemoSquareEquation if (DemoSquareEquation(2, 3, 4, x1, x2)) { cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl; } return; }
⇑
Споріднені теми
- Поняття виключної ситуації. Інструкція try-catch. Оператор throw. Приклади використання
- Приклад створення власної ієрархії класів, що обробляють виключні ситуації
⇑