Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Catch (тип_исключения имя_перем)




Try

Краткие сведения об обработке исключительных ситуаций.

Void print_vals(val_type start_x, val_type end_x, val_type step, func f)

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

Val_type math_func(double val)

{

return = 1 / val;

}

//---------------------------------------------------

/*

*/

{

for(; start_x <= end_x; start_x += step)

printf("%6.4f -> %6.4f\n", start_x, f(start_x));

}

//---------------------------------------------------

main()

{

float start_x, end_x, step;

printf("Enter the start value of x: ");

scanf("%f", &start_x);

printf("Enter the end value of x: ");

scanf("%f", &end_x);

printf("Enter the step of x: ");

scanf("%f", &step);

print_vals(start_x, end_x, step, math_func);

return 0;

}

Использование указателей на функцию в данном случае позволили написать функцию по выводу значений математической функции на экран, которая не зависит от того, с какой конкретно математической функцией ей придется работать. При этом не использовались сложные анализаторы математических выражений, которые позволяют на основании записи математической функции в виде строки получить соответствующее выражение ее вычисляющее.

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

В примере 1 возможна ситуация, когда при значении аргумента, равным 0, в используемой математической функции произойдет деление на 0. При использовании вещественных типов данных это не приведет к аварийному останову программы, но при этом будет получено значение 1.#INF. При таком написании функции (1 аргумент, значение возвращается через имя) и разделении вывода на экран и вычисления значения функции (при выводе неизвестно, значение какой функции вычисляется) единственно разумным способом решения подобной проблемы является применение обработки исключительных ситуаций.

Для обработки исключительных ситуаций в C++ может применяться конструкция:

 

{

// Код, который может привести к возникновению исключительной ситуации,

// Еще называется защищенная секция

}

{

// Действия при исключениях определенного типа

}

//….

catch (…)

{

// Действия при исключениях всех остальных типов

}

 

При этом исключение (определенного типа) можно сгенерировать искусственно с помощью оператора throw <выражение>, где значение выражения и определяет тип исключения.

Если в защищенной секции не произойдет ничего, что могло бы возбудить исключительную ситуацию (или просто исключение), то все секции catch пропускаются и программа продолжает свое выполнение в обычном режиме. Если же в защищенной секции исключение произошло, то происходит поиск первой по порядку секции catch, тип обрабатываемого исключения которой совпадает с возникшим исключением. Следует отметить, что если значение, которое соответствует исключительной ситуации, при ее обработке неважно, важен только сам факт возникновения исключения определенного типа, то имя переменной после типа исключения можно опускать. Секция catch, тип исключения которой …, перехватывает исключения всех типов, поэтому ВСЕГДА должна помещаться последней. Если нет подходящей для данного исключения секции catch, то вызывается функция terminate(). Следует отметить, что хотя бы одна секция catch должна быть ОБЯЗАТЕЛЬНО описана.

 

Пример 2. Демонстрация возможностей обработки исключительных ситуаций.

 

#include <stdio.h>

main()

{

int choise;




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


Дата добавления: 2017-01-14; Просмотров: 324; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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