Читать «Полный справочник по С++» онлайн - страница 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();

туаций. Возвращает указатель на старый обработчик этого вида