Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

При решении задач ООП также можно столкнуться с проблемой — что делать методу класса, если он обнаруживает некоторую ошибку, вызванную некорректным обращением к методу? (Например, недопустимое значение индекса в классе векторов).

Инструментарий, которым мы пользовались до сих пор, позволял предпринять одно из следующих действий:

• прервать выполнение программы;

• возвратить значение, означающее «ошибка»;

• вывести сообщение об ошибке в поток cerr и вернуть вызывающей программе некоторое приемлемое значение, которое позволит ей продолжать работу.

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

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

И, наконец, третий вариант решения тоже часто связан с трудно решаемыми вопросами: что есть «приемлемое значение» и почему программа продолжает свою работу независимо от обнаруженной ошибки?

С подобными проблемами часто сталкиваются разработчики библиотек классов широкого применения (библиотек типа STL). Автор библиотечного класса может обнаружить ошибки времени выполнения, но, в общем случае, не знает, как должен реагировать пользователь на эти ошибки.

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

Для решения подобных проблем в C++ были введены средства генерации и обработки исключений (exception).

Заметим, что такими средствами пользуются не только при разработке библиотек.

Например, в процессе выполнения конструктора класса может возникнуть какая-то нештатная ситуация (скажем, нехватка памяти). Поскольку конструктор не имеет возвращаемого значения, то единственным способом для него уведомить об этом клиента также является генерация исключения.





Дата публикования: 2014-11-28; Прочитано: 185 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...