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; просмотров: 697;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.