КАТЕГОРИИ: Архитектура-(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) { } 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 возведенный в степень е
Дата добавления: 2014-01-11; Просмотров: 305; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |