C++ Винятки
C++ Винятки
Під час виконання коду C++ можуть виникати різні помилки: помилки кодування, зроблені програмістом, помилки через неправильне введення чи інші непередбачені речі.
Якщо виникає помилка, C++ зазвичай зупиняється та генерує повідомлення про помилку. Технічний термін для цього такий: C++ викине виняток (викине помилку).
C++ try та catch
Обробка винятків у C++ складається з трьох ключових слів: try
, throw
та catch
:
Інструкція try
дозволяє визначити блок коду, який буде перевірено на помилки під час його виконання.
Ключове слово throw
генерує виняток у разі виявлення проблеми, що дозволяє нам створити спеціальну помилку.
Інструкція catch
дозволяє визначити блок коду, який буде виконано, якщо в блоці try станеться помилка.
Ключові слова try
та catch
ідуть парами:
Приклад
try {
// Блок коду для try
throw exception; // Створення винятку, коли виникає проблема
}
catch () {
// Блок коду для обробки помилок
}
Розглянемо наступний приклад:
Приклад
try {
int age = 15;
if (age >= 18) {
cout << "Доступ надано - ви достатньо дорослі.";
} else {
throw (age);
}
}
catch (int myNum) {
cout << "У доступі відмовлено - вам має бути не менше 18 років.\n";
cout << "Вік є: " << myNum;
}
Спробуйте самі »
Пояснення прикладу
Ми використовуємо блок try
, щоб перевірити деякий код: якщо змінна age
менша за 18
, ми throw
(викидуємо) виняток і обробляємо його в блоці catch
.
У блоці catch
ми виявляємо помилку та щось з нею робимо. Інструкція catch
приймає параметр: у нашому прикладі ми використовуємо змінну int
(myNum
) (оскільки ми створюємо виняток типу int
у try
(age
)), щоб вивести значення age
.
Якщо помилка не виникає (наприклад, якщо age
(вік) становить 20
замість 15
, тобто він буде більшим за 18), блок catch
пропускається:
Ви також можете використати ключове слово throw
, щоб вивести контрольне число, як-от спеціальний номер/код помилки для цілей організації (505
у нашому прикладі):
Приклад
try {
int age = 15;
if (age >= 18) {
cout << "Доступ надано - ви достатньо дорослі.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "У доступі відмовлено - вам має бути не менше 18 років.\n";
cout << "Номер помилки: " << myNum;
}
Спробуйте самі »
Обробка будь-якого типу винятків (...)
Якщо ви не знаєте тип throw
, який використовується в try
, ви можете використовувати синтаксис "трьох крапок" (...
) всередині блоку catch
, який оброблятиме будь-який тип винятку:
Приклад
try {
int age = 15;
if (age >= 18) {
cout << "Доступ надано - ви достатньо дорослі.";
} else {
throw 505;
}
}
catch (...) {
cout << "У доступі відмовлено - вам має бути не менше 18 років.\n";
}
Спробуйте самі »