Студопедия

КАТЕГОРИИ:


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

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




Использование

ЗАМЕЧАНИЕ

Особенно важно понять что функции исключительных ситуаций не ограничены обработкой ошибок, что бы ни говорилось в вашем описании Borland G++ и в других источниках. Например, пустой списочный объект может сообщать о том, что он пуст, путем возбуждения исключительной ситуации. Произошла ошибка или что-нибудь еще, зависит только от того, как вы назначите аварийные прерывания выполнения программ. Наверное, вы согласитесь, что неспособность открыть файл — ошибка. Однако является ли отсутствие заданной строки в файле ошибкой или это просто один из возможных, но не исключительных, результатов, о которых может сообщить функция поиска? В зависимости от вашего ответа на этот вопрос, исключительные ситуации могут вам пригодиться или же нет для принятия соответствующих мер в случае неудавшихся поисков или опустевших списков.

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

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

Например, м. объявить класс Overflow, он не нуждается в каком-либо содержимом, необходимо лишь имя:

class Overflow { };

Можно послать экземпляр этого класса для возбуждения исключительной ситуации (предположим, внутри функции):

throw Overflow();

В этом операторе создается объект класса Overflow, который затем посылается обратно в место вызова функции.

Где-нибудь в другом месте программы можно перехватить исключительную ситуацию с помощью оператора catch:

catch (Overflow) {

cout «"Overflow detected!" << endl;

Одно только присутствие объекта Overflow свидетельствует о возбуждении исключительной ситуации. Объект не обязан предпринимать каких-либо действий (хотя может).

Важно понять, что предыдущий оператор throw посылает объект класса Overflow, который перехватывается оператором catch в другом месте программы

(пока не думайте о том, где именно).

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

catch (Overflow overObject) {//…}

На этот раз объект в операторе catch получил имя overObject.

В других операторах внутри catch можно использовать объект overObject точно так же, как и в операторах, использующих параметр функции.

Например, обычно в классе исключительной ситуации реализуются функции-члены, которые можно вызы­вать в выражениях внутри catch.

пример:

class Overflow {

// объявляется функция-член //Repor(), отображающая //сообщение об ошибке

void Report()

{ cout << "Error: overflow" << endl; }

};

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

//В операторе catch можно вызвать //Report() объекта исключительной //ситуации для отображения сообщения //об ошибке:

catch (Overflow overObject) {

overObject.Report();

// Вызвать функцию Report //брошенного объекта

}




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


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


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



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




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