Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Программирование с исключительными ситуациями

ЗАМЕЧАНИЕ

Исключительные ситуации упраздняют необходимость резервирования специальных возвращаемый значений для ошибок. Например, в классическом программировании на С и C++ для функции, возвращающей целое значение, может указываться, что сигнализирует об ошибке, прочие же возвращаемые значения — допустимые. В этом приеме нет ничего неправильного, просто резервирование специальных значений не всегда возможно. Рассмотрим функцию, суммирующую список целых значений. В этом случае все возвращаемые значения могут быть допустимыми, и невозможно зарезервировать одно из них для особого случая. Большинство программистов решают эту проблему, определяя глобальную переменную-флаг для ошибок, которая должна проверяться в программе обнаружения ошибок после вызова функции. Исключительные ситуации позволяют отказаться от такого запутанного способа обработки ошибок с помощью возврата объектов, представляющих состояния исключительных ситуаций без конфликтов с нормальными возвращаемыми значениями функции.

Пример программы EXCEPT.CPP (листинг 15.16) демонстрирует использование исключительных ситуа­ций ANSI C++. Вы можете скомпилировать и запустить программу из DOS или WINDOWS. Из приглашения DOS следует ввести bec except, а затем имя программы для запуска получившегося в результате исполняемо­го файла EXCEPT.EXE. Или же из интегрированной среды скомпилируйте и запустите программу в качестве Easy Win-приложения.

Для демонстрации в модуле EXCEPT.CPP имеется оператор, который не выполняет никаких действий, что служит причиной предупреждений компилятора "Unread/able, code at line 78" (Недостижимый код и строке 78). Я включил этот оператор throw для отладки. Если вы сделаете ошибку, модифицировав программу (конечно, она хранится на диске, и вы не должны этого делать), оператор throw в строке 78 создаст объект класса Error с помощью вызова конструктора по умолчанию. Изучите объявление класса. Созданный таким способом, объект Error отобразит сообщение, свидетельствующее об ошибке в исходном коде.

Листинг 15.16. EXCEPT.CPP (использование исключительных ситуаций ANSI C++)

// Демонстрация исключительных ситуаций ANSI C++

«include <iostream.h> «include <math.h>

// Прототипы функций

void Instruct();

double Pow(double b, double e);

double Power(double b, double e);

// Классы исключительных ситуаций

class Error {

double b; // Основание

double e; // Показатель степени

public:

Error()

{ cout «"Error in code" «endl; }

Error(double bb, double ее): b(bb), e(ee) { }

void Report();

}

int main()

{

Instruct();

try {

double base, exponent, result;

cout << "base? ";

cin» base;

cout «"exponent? ";

cin >> exponent;

result = Power(base, exponent);

cout << "result == " «result << endl;

}

catch (Error & e) {
e.Report();
return -1;

}

return 0;

}

void Instruct() {

cout «"Power Demonstration\n\n";

cout <<"This program displays the result of raising\n";

cout <<"a value (base) to a power (exponent). To\n";

cout << "force an exception, enter a negative base\n";

cout << "and a fractional exponent (e.g. -4 and 1.5)\n";

cout << "Or, enter a zero base and an exponent less than\n";

cout << "zero.\n\n";

}

// Подфункция возведения в степень b^e

double Pow(double b, double e) {

return exp(e * log(b));

}

// Результирующий b возведенный в степень е

<== предыдущая лекция | следующая лекция ==>
If (coB) | Замечание
Поделиться с друзьями:


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


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



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




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