Функция может возбудить исключение range_error,
};
class range_error : public runtime_error { // ошибка диапазона
public:
explicit range_error( const string &what_arg );
};
class overflow_error : public runtime_error { // переполнение
public:
explicit overflow_error( const string &what_arg );
};
class underflow_error : public runtime_error { // потеря значимости
public:
explicit underflow_error( const string &what_arg );
};
}
Функция может возбудить исключение range_error, чтобы сообщить об ошибке во внутренних вычислениях. Исключение overflow_error говорит об ошибке арифметического переполнения, а underflow_error – о потере значимости.
Класс exception является базовым и для класса исключения bad_alloc, которое возбуждает оператор new(), когда ему не удается выделить запрошенный объем памяти (см. раздел 8.4), и для класса исключения bad_cast, возбуждаемого в ситуации, когда ссылочный вариант оператора dynamic_cast не может быть выполнен (см. раздел 19.1).
Переопределим оператор operator[] в шаблоне Array из раздела 16.12 так, чтобы он возбуждал исключение типа range_error, если индекс массива Array выходит за границы:
#include <stdexcept>
#include <string>
template <class elemType>
class Array {
public:
// ...
elemType& operator[]( int ix ) const
{
if ( ix < 0 || ix >= _size )
{
string eObj =
"ошибка: вне диапазона в Array<elemType>::operator[]()";
throw out_of_range( eObj );
}
return _ia[ix];
}
// ...
private:
int _size;
elemType *_ia;
};
Для использования предопределенных классов исключений в программу необходимо включить заголовочный файл <stdexcept>. Описание возбужденного исключения содержится в объекте eObj типа string. Эту информацию можно извлечь в обработчике с помощью функции-члена what():
int main()
{
try {
// функция main() такая же, как в разделе 16.2
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий