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 здесь генерируется исключительная ситуация, которая не указана в спецификации исключительных ситуаций (и действительно, этот пример корректно компилируется и компонуется).