598_______________________________Часть IV. Новые возможности C++

чительной ситуации должен иметь соответствующий обработчик, так как, если ядро C++ во время выполнения программы не сможет найти подходящий обработчик, к которому следует направить исключительную ситуацию, оно завершит программу. (Как вы позже увидите, у этого правила имеются исключения).

Абсолютный обработчик. Вы можете использовать всеядный обработчик, способный переварить любой тип исключительной ситуации. Вместо аргумента такой обработчик содержит многоточие. Эту разновидность обработчиков демонстрирует листинг 22.14.

h05981.jpg

// Необходимые заголовки

#include <limits.h>

#include <iostream.h>

unsigned short Add (unsigned short addendl, unsigned short addeno.2) (

unsigned long sum = addendl + addend2;

if (sum > USHRT_MAX) throw 1;

return (unsigned short) sum;

)

unsigned short Divide(unsigned short dividend, unsigned short divisor) (

if (divisor == 0)

throw "Деление на ноль";

return (unsigned short)(dividend / divisor) ;

}

void main() f

try {

unsigned short Result = Add(12345, 12345);

cout « "Первый ответ " « Result « "\n";

Result = Divide(55, 0) ;

cout « "Второй ответ " « Result « "\n";

} catch (int) {

cout « "Переполнение при сложении!\п";

} catch (...) {

cout « "Какая-то другая неприятность.\п";

)

В этом примере вызов функции Add о завершается нормально, потому что ее аргументы не приводят к переполнению. Однако следующий за ним вызов