И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина





НазваниеИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина
страница27/32
Дата публикации01.09.2013
Размер1.4 Mb.
ТипЛекция
100-bal.ru > Информатика > Лекция
1   ...   24   25   26   27   28   29   30   31   32

Лекция 8. Обработка исключительных ситуаций. Средства динамической идентификации типа

1. Обработка исключительных ситуаций


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

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

try (

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

}

catch (typel arg) {

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

}

catch (type2 arg) {

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

}

...

catch (typeN arg) {

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

}

Блок try должен содержать ту часть программы, в который требуется отслеживать ошибки. Это могут быть как несколько операторов внутри одной функции, так и все операторы внутри функции main() (что ведет к отслеживанию ошибок во всей программе).

Возбужденное исключение перехватывается оператором catch, который соответствует этому конкретному типу исключения. С блоком try может быть связано несколько блоков catch. После возбуждения исключения все оставшиеся операторы блока try игнорируются (т.е. сразу после того, как какой-то оператор внутри блока try сгенерировал исключение, управление передается соответствующему оператору catch, минуя оставшиеся операторы блока try). При перехвате исключения его значение внутри блока catch доступно под именем arg. Если доступ к информации об исключении не нужен, то в операторе catch можно указать только ее тип type, а имя параметра arg не указывать.

Возбуждение исключительной ситуации выполняется оператором throw:

throw значение;

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

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

Простейший пример обработки исключений показан в программе 8.1. В ней есть блок try, содержащий три оператора, и блок catch для перехвата и обработки целочисленного исключения.
#include
void main()

{

cout << "Начало\n";

try {

cout << "Оператор внутри блока try\n";

throw 10; // возбуждение исключения типа int

cout << "Этот оператор не будет выполняться";

}

catch ( int i ) { // перехват исключения типа int

cout << "Перехвачено исключение со значением ";

cout << i << "\n";

}

cout << "Завершение работы программы";

}

Программа 8.1. Обработка исключения.
Программа 8.1 выводит на экран следующие сообщения:

Начало

Оператор внутри блока try

Перехвачено исключение со значением 10

Завершение работы программы
Исключения могут генерироваться внутри функций, которые вызываются из блока try. В программе 8.2 приведен соответствующий пример, в котором также показано расположение нескольких блоков catch для перехвата разнотипных исключений.
#include

#include
// Класс "Информация об исключении"

class CExceptionMsg {

public:

CExceptionMsg( char* sMsg )

{ msg = new char[strlen( sMsg )+1]; strcpy( msg, sMsg ); }

~CExceptionMsg()

{ delete msg; }

char* GetMsg()

{ return msg; }
private:

char* msg;

};
void func(int test)

{

if ( test == 0 )

throw "Значение равно нулю";

if ( test == 2 )

throw new CExceptionMsg( "Exception Info: значение равно 2" );

throw test;

}
void main()

{

cout << "Начало\n";

try {

func(0);

func(1);

func(2);

func(3);

}

catch (int i) {

cout << "Перехвачено целое число: " << i << "\n";

}

catch(char *str) {

cout << "Перехвачена строка: " << str << "\n";

}

catch(CExceptionMsg* pEx) {

cout << "Перехвачен объект-исключение с сообщением: ";

cout << pEx->GetMsg() << "\n";

delete pEx;

}
cout << "Завершение работы программы";

}

Программа 8.2. Обработка разнотипных исключений.
На экран программа 8.2 выводит следующие сообщения:

Начало

Перехвачена строка: Значение равно нулю

Завершение работы программы
Как видите, каждый оператор catch перехватывает только исключения определенного типа. Для обработки исключений произвольного типа (например, чтобы выдать сообщение о неизвестной ошибке и завершить работу программы) можно завести блок catch, у которого вместо типа данных указано многоточие:
catch(...) {

cout << "Перехвачено какое-то исключение.\n";

exit( 1 );

}
Оператор catch(...) бывает удобно использовать в качестве последнего оператора в группе операторов catch. В этом случае catch(...) по умолчании становится блоком, который перехватывает все необработанные исключения.


1   ...   24   25   26   27   28   29   30   31   32

Похожие:

И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПротокол №5 От 12 января 2012 г Заседания кафедры электроники и вычислительной...
Зав кафедрой Хакимова Г. Г. сообщила, что кафедра проводит 2-й Чемпионат по цифровой схемотехнике
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по подготовке, оформлению, предзащите и...
В. А. Усков, заместитель декана естественно-географического факультета по развитию, доцент кафедры физической географии и методики...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПроблемы коммуникации
М. Е. Евсевьева (зав кафедрой, доцент А. А. Ветошкин); С. А. Борисова, директор Института международных отношений Ульяновского государственного...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
Елена Святославовна Симакова, кандидат педагогических наук, доцент кафедры гуманитарных и естественнонаучных дисциплин Рязанского...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма курса по выбору «Орнитология» предназначена для студентов...
Автор программы: к б н., доцент, зав кафедрой биологии и химии Марина Николаевна Харламова
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРоссийской Федерации Федеральное государственное образовательное...
Петренко И. М., зав кафедрой экономической теории, д-р экон наук профессор Дулин М. П., зав кафедрой педагогики и психологии, д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРахманкулова Людмила Кузьминична, кандидат филологических наук, доцент...
Автор программы: С. А. Виноградова, кандидат филологических наук, доцент, зав кафедрой английского языка и английской филологии
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconЛингвистические проблемы
Московского государственного педагогического института иностранных языков им. М. Тореза (зав кафедрой доцент Ю. А. Денисенко); д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМгпу учебно-методический комплекс дисциплины
А. В. Прялухина, кандидат психологических наук, доцент, зав кафедрой психологии Российского государственного социального университета...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «теория экономического анализа»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «международный менеджмент»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по написанию курсовых работ дисциплине
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconУчебное пособие Краснодар 2008
В. А. Оробец); кафедра паразитологии и ветсанэкспертизы Донского государственного аграрного университета (зав кафедрой, проф., к...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск