590 __ _____Часть IV. Новые возможности C++

тинге 22.7, где представлен тривиальный пример обработки исключительной ситуации.

h05901.jpg

// Необходимые заголовки ttinclude <limits.h> #include <iostream.h>

unsigned short Add(unsigned short addendl, unsigned short addend2) { ' ' •

unsigned long sum = addendl + addend2;

if (sum > USHRT_MAX) throw 1;

return (unsigned short) sum;

)

void main(! ^ t

try {

unsigned short Result. = Add(12345, 54321);

cout « "Ответ равен " « Result « "\n";

} catch (int ErrorCode) {

cout « "Переполнение! ErrorCode = " « ErrorCode « "\n";

"Гример в листинге 22.7 имеет три интересных элемента. Заметьте, что вызов функции Add о заключен внутри блока, которому предшествует ключевое ;лово try. Этот блок try указывает компилятору, что программа намеревает-:я обрабатывать исключительные ситуации, которые могут происходить в тределах этого блока. По этой причине код, заключенный в блоке try, шогда называют охранным (guarded).

Непосредственно за блоком try следует блок catch, называемый обычно обработчиком исключительной ситуации (exception handler). Если возникает юключительная ситуация, выполнение программы переходит к этому блоку. Сотя в этом простом примере имеется один-единственный обработчик, их в [рограммах может присутствовать множество и способны они обрабатывать тожество различных типов исключительных ситуаций.

!

1оследним элементом процесса обработки исключительных ситуаций явля-тся оператор throw, находящийся в функции Add(). Оператор throw факта-ески сигнализирует об исключительном событии. Программный код генерирует (throw) объекты исключительных ситуаций, которые перехватывают -я (catch) обработчиками. Этот процесс иногда еще называют вызовом исклю-