русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обработка исключений


Дата добавления: 2014-11-20; просмотров: 703; Нарушение авторских прав


Исключения возникают при какой-либо ошибке в программе, а также при ее искусственной генерации в программе. Например, при попытке открыть файл с неверным именем операционная система сгенерирует исключение с соответствующим номером. Из программы мы можем сгенерировать исключение с помощью оператора throw. Примеры:

throw 123;

throw “Исключительная ситуация 2”;

Для обработки исключений используется оператор try … catch.

При возникновении исключения C++ первым делом копирует сгенерированный объект в некоторое нейтральное место. После этого просматривается конец текущего блока try. Если блок try в данной функции не найден, управление передается вызывающей функции, где и осуществляется поиск обработчика. Если и здесь не найден блок try, процесс повторяется далее, вверх по стеку вызывающих функций. Этот процесс называется разворачиванием стека. Важной особенностью разворачивания стека является то, что на каждом его этапе все объекты, которые выходят из области видимости, уничтожаются так же, как если бы функция выполнила команду return. Это оберегает программу от потери ресурсов и действий неуничтоженных объектов. Когда необходимый блок try найден, программа ищет первый блок catch (который должен находиться сразу за закрывающей скобкой блока try). Если тип сгенерированного объекта совпадает с типом аргумента, указанным в блоке catch, управление перелается этому блоку (при этом аргументу catch будет присвоено значение объекта исключения); если же нет, проверяется следующий блок catch. Если в результате подходящий блок не найден, программа продолжает поиск уровнем выше, пока не будет обнаружен необходимый блок catch. Если искомый блок так и не найден, программа аварийно завершается. Возможно написание catch (…). Это соответствует любому типу и значению объекта исключения.



Пример с генерацией своего исключения:

#include <iostream.h>

//factorial - вычисляет факториал

int factorial(int n)

{

// Поскольку функция не может работать с

// отрицательными n, мы сразу проверяем

// допустимость переданного аргумента

if (n<0) throw "Отрицательный аргумент";

// теперь вычислим факториал

int accum=1;

while(n>0)

{

accum*= n;

n--;

}

return accum;

}

int main(int arges, char *pArgs[])

{

try

{

// Эта строка генерирует исключение

сout<<"Факториал от -1 равен"<<factorial(-1)<<endl;

// Управление никогда не дойдет до этой строки

cout<<" Факториал от 10 равен "<<factorial(10)<<endl;

}

// управление будет передано сюда

catch (char *pError)

{

cout<<"Возникла ошибка: " <<pError<<endl;

}

return 0;

}

Пример с исключительной ситуацией при записи на диск:

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

int main(int arges, char *pArgs[])

{

FILE *f;

try

{

// следующая строка вызовет исключительную ситуацию

// так как имя файла некорректно

f=fopen(”invalid+.dat”,”wt”);

// продолжение блока try

}

catch(…)

{

cout<<"Ошибка при открытии файла"<<endl;

}

}



<== предыдущая лекция | следующая лекция ==>
Полиморфизм | Указатель на текущий объект


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.109 сек.