Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Краткие теоретические сведения. С++ обеспечивает встроенный механизм обработки ошибок, называемый обработкой исключительных ситуаций






 

С++ обеспечивает встроенный механизм обработки ошибок, называемый обработкой исключительных ситуаций. Благодаря обработке исключительных ситуаций можно упростить управление и реакцию на ошибки во время выполнения программы. Обработка исключительных ситуаций в С++ организуется с помощью трех ключевых слов: try, catch и throw. Инструкции программы, во время выполнения которых вы хотите обеспечить обработку исключительных ситуаций, располагаются в блоке try, она возбуждается (ключевое слово throw), перехватывается (ключевое слово catch) и обрабатывается.

Как уже отмечалось, любая инструкция, которая возбуждает исключительную ситуацию, должна выполняться внутри блока try. Функции, которые вызываются из блока try также могут возбуждать исключительную ситуацию. Любая исключительная ситуация должна перехватываться инструкцией catch, которая располагается непосредственно за блоком try, возбуждающем исключительную ситуацию. Основная форма инструкций try и catch имеет вид:

try {

// блок возбуждения исключительной ситуации

}

catch (тип1 аргумент) {

// блок перехвата исключительной ситуации

}

catch (тип2 аргумент) {

// блок перехвата исключительной ситуации

}

catch (типN аргумент) {

// блок перехвата исключительной ситуации

}

После того как исключительная ситуация возбуждена, она перехватывается соответствующей этой исключительной ситуации инструкцией catch, которая ее обрабатывает. С блоком try может быть связано несколько инструкций catch. То, какая именно инструкция catch используется, зависит от типа исключительной ситуации. То есть, если тип данных, указанный в инструкции catch, соответствует типу исключительной ситуации, выполняется данная инструкция catch. При этом все оставшиеся инструкции блока try игнорируются. Если исключительная ситуация перехвачена, аргумент получает ее значение. Если вам не нужен доступ к самой исключительной ситуации, можно в инструкции catch указать только ее тип, аргумент указывать не обязательно. Можно перехватывать любые типы данных, включая и типы создаваемых вами классов. Фактически в качестве исключительных ситуаций чаще всего используются классы.

Далее представлена основная форма инструкции throw:

throw исключительная_ситуация;

Инструкция throw должна выполняться либо внутри блока try, либо в любой функции, которую этот блок вызывает (прямо или косвенно). Здесь исключительная_ситуация – это возбуждаемая инструкцией throw исключительная ситуация.

Если возбуждается исключительная ситуация, для которой нет соответствующей инструкции catch, может произойти ненормальное завершение программы.

Пример. Как известно знаменатель дроби не может быть равен 0. Модифицирует функцию, переопределяющую оператор ввода для класса fraction, добавив в него возможность не допускать равенства 0 знаменателя.

istream & operator> > (istream & stream, fraction & ob){

cout< < " Числитель"; stream> > ob.m;

cout< < " Знаменатель"; stream> > ob.n;

try{ if(ob.n==0) {throw (ob.n); }

}

catch(int){

cout< < " Знаменатель не может быть равен 0. " exit(1);

};

return stream;

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.