Читать «Полный справочник по С++» онлайн - страница 423
Герберт Шилдт
partial_sum(v.begin() , v.endO, r.beginO);
cout « "Результат: for(i=0; i<5; i++) cout « r[i] « " ";
return 0;
}
Результат работы программы приведен ниже.
■Исходная последовательность: 0 12 3 4 Результат: 0 1 3 6 10
Полный справочник по
Глава 38
Обработка исключительных ситуаций и прочие классы
|2 этой главе описываются классы, предназначенные для обработки исключительных ситуаций. Кроме того, рассматриваются классы auto_ptr и pair, а также приводится краткий обзор библиотеки локализации.
Исключительные ситуации
Стандарт языка C++ предусматривает два заголовка, связанных с исключительными ситуациями: <exception> и <stdexcept>. Исключительные ситуации предназначены для выявления ошибок. Рассмотрим каждый из упомянутых заголовков.
Заголовок <exception>
В заголовке <exception> определены классы, типы и функции, связанные с обработкой исключительных ситуаций. Классы, определенные в заголовке <exception», приводятся ниже.
class exception { public:
exception() throw();
exception (const bad_exception &ob) throwO; virtual -exception() throwO;
exception &operator=(const exception &ob) throwO ; virtual const char *what() const throwO;
};
class bad_exception: public exception { public:
bad_exception() throw();
bad_exception(const bad_exception bob) throwO; virtual ~bad_exception() throwO;
bad_exception &operator=(const bad_exception bob) throwO; virtual const char *what () const throwO;
} ;
Класс exception является базовым для всех исключительных ситуаций, определенных в стандарте языка C++. Класс bad_exception описывает тип исключительной ситуации, генерируемой функцией unexpected (). В каждом классе есть функция-член what О, возвращающая указатель на строку, которая завершается нулевым байтом и описывает возникшую исключительную ситуацию.
Класс exception является базовым для нескольких важных классов. К ним относятся: 1) класс bad_alloc, генерирующий исключительную ситуацию при неудачном выполнении оператора new; 2) класс bad_typeid, генерирующий исключительную ситуацию при неправильном выполнении оператора typeid; и 3) класс bad_cast, генерирующий исключительную ситуацию при некорректном динамическом приведении типов. Эти классы состоят из тех же членов, что и класс exception.
В заголовке <exception> определены следующие типы.
Тип Прототип
terminate_handler void(*terminate_handler)();
unexpectedhandler void(*unexpected handler)();
Функции, объявленные в заголовке <exception>, перечислены в табл. 38.1. Таблица 38.1. Функции, определенные в заголовке <exception>
terroinate handler Назначает функцию, заданную параметром fn, об-
set_terminate (terminate_handler fn) работником неисправимых ошибок. Возвращает ука-throw (); затель на старый обработчик этого вида
terminate_handler Назначает функцию, заданную параметром fn, об-
set unexpected (unexpectedhandler fn) работником непредвиденных исключительных СИ-
throw ( ) 1
void terminate();
bool uncaught_exception();
void une^ected();
туаций. Возвращает указатель на старый обработчик этого вида