590 __ _____Часть IV. Новые возможности C++
тинге 22.7, где представлен тривиальный пример обработки исключительной ситуации.
// Необходимые заголовки 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) обработчиками. Этот процесс иногда еще называют вызовом исклю-