598_______________________________Часть IV. Новые возможности C++
чительной ситуации должен иметь соответствующий обработчик, так как, если ядро C++ во время выполнения программы не сможет найти подходящий обработчик, к которому следует направить исключительную ситуацию, оно завершит программу. (Как вы позже увидите, у этого правила имеются исключения).
Абсолютный обработчик. Вы можете использовать всеядный обработчик, способный переварить любой тип исключительной ситуации. Вместо аргумента такой обработчик содержит многоточие. Эту разновидность обработчиков демонстрирует листинг 22.14.
// Необходимые заголовки
#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 о завершается нормально, потому что ее аргументы не приводят к переполнению. Однако следующий за ним вызов