Void main(). cout<< "Входимо в try-блок" << endl;
{
try
{
cout<< "Входимо в try-блок" << endl;
f2();
cout << "Виходимо з try-блока" << endl;
}
catch(int i)
{
cout<<"Викликаний обробник int, виключення – " <<i<<endl;
return;
}
catch(const char * p)
{
cout<<"Викликаний обробник const char*, виключення – "
<< p << endl;
return;
}
catch(...)
{
cout << "Викликаний обробник всіх виключень" << endl;
return;
}
}
Результати виконання програми:
Входимо в try-блок
Hello!
Генеруємо виключення
Bye!
Викликаний обробник const char*, виключення – Помилка при відкритті файлу
Зверніть увагу, що після породження виключення був викликаний деструктор локального об'єкту, хоча управління з функції f1 було передане обробникові, що знаходиться у функції main. Повідомлення "Виходимо з try-блоку" не було виведено. Таким чином, механізм виключень дозволяє коректно знищувати об'єкти при виникненні помилкових ситуацій. Тому виділення і звільнення ресурсів корисно оформляти у вигляді класів, конструктор яких виділяє ресурс, а деструктор – звільняє. Як приклад можна привести клас для роботи з файлом. Конструктор класу відкриває файл, а деструктор – закриває. В цьому випадку є гарантія, що при виникненні помилки файл буде коректно закритий, і інформація не буде загублена.
Розглянемо приклад використання виключень при контролі введення даних. Введення має бути цілим числом в діапазоні 0-20:
#include <iostream>
using namespace std;
#include <conio.h>
#include <windows.h>
Дата добавления: 2014-12-26; просмотров: 752;