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

class Cat : public Pet { };

// Здесь мы применим спецификацию исключительных ситуаций

void TestFunction(bool boolFlag) throw(Pet)

(

// Флаг установлен?

if (boolFlag)

throw Cat();

// Нет! . throw SimpleException();

}

void mainO

(

// Первый пример - перехватить Pet try {

Test.Function(true) ;

» catch(SimpleException&j {

cout « "Перехвачена SimpleException!" « endl;

> catch(Pet&) (

cout « "Перехвачена Pet!" « endl;

1

// Второй пример — перехватить SimpleException(??) try {

TestFunction(false) ;

} catch(SimpleExceptions) {

cout « "Перехвачена SimpleException!" « endl;

} catch(Pet&) {

cout « "Перехвачена Pet!" « endl;

} }

В этом примере функция TestFunction () имеет спецификацию исключительных ситуаций, которая гарантирует, что в этой функции могут генерироваться только исключительные ситуации типа pet или производные от Pet. В этом кратком примере следует отметить несколько моментов. Компилятор Borland не будет анализировать ваш исходный код на предмет отсутствия возможности генерации исключительных ситуаций отличного от pet типа — это не является синтаксической ошибкой. Ясно, что при установке переменной boolFlag в false здесь генерируется исключительная ситуация, которая не указана в спецификации исключительных ситуаций (и действительно, этот пример корректно компилируется и компонуется).