Загрузка...

Возбуждение нескольких ИС


В ф-ях можно возбуждать объекты ИС различных типов для поддержки различных условий ИС:
int AnyFunction () {
if (condition A) throw “Big trouble”; // строковой объект
if (condition B) throw Overflow(); // объект класса Overflow
return 123;
Есть 3 важных следствия из привеленного примера:
1) Ф-ции могут возбуждать одну или несколько ИС различных типов, представляющие различные условия ИС.
2) Возбуждение ИС немедленно завершает выполнение ф-ции, в которой выполняется оператор throw
3) ИС обеспечивает альтернативный механизм возврата из ф-ции
Ф-я AnyFunction обычно возвращает целочисленные значения, однако если возникла ИС она возвращает строку или объект класса Overflow, только операторы catch могут воспринимать эти возвращаемые значения
Catch (Error e) {
// обработка ИС для класса Error
}
catch (const char *message) {
// обработка ИС для строк
}
15) Блоки Try
Для возбуждения объектов в исключительной ситуации внутри блока try вызывается некоторая функция
try{
int x=AnyFunction();
}
catch(Errore){
e.Report(); // Вызов функции Report объекта Error
exit(–1); // Прервать выполнение программы
}
Блок try содержит один или несколько операторов, исключительные ситуации которых перехватываются. За блоком try должен следовать один или несколько операторов catch. Несколько блоков try и соответствующих им операторов catch м/б объявлены вложенными.
В блоке try обычно присутствует несколько операторов
try{
cout<<”Here we go!”<<endl;
int x=AnyFunction();
cout<<”x= =”<<x<<endl;
}
Если в функции AnyFunction возникла исключительная ситуация, блок try немедленно завершается. Другими словами, любое условие исключительной ситуации приводит к пропуску присваивания x и завершающего оператора вывода.

Рассмотрим пример, как можно обработать несколько исключительных ситуаций

try{
cout<<”Here we go”<<endl;
int x=Anyfunction();
cout<<”x= =”<<x<<endl;
}
catch(char *message){
cout<<”Error! –”<<message<<endl;
exit(-1);
}
catch(Overflow){
cout<<”Overflow!”<<endl;
exit(-2);
}

В приведенном примере два оператора catch обрабатывают исключительные ситуации для строк и для классов. Любые другие типы исключительных ситуаций не обрабатываемые данными операторами catch передаются вверх по цепочке вызовов. В конце концов, если ни один оператор catch подходящего типа не был найден в цепочке вызовов, ведущих к исключительным ситуациям, выполняемая программа прерывается вызовом специального обработчика исполняющей системы.

16) Введение в использование библиотеки классов.
В настоящее время фирмой Borland рекомендуется для создания переносимых программ использование STL (Standart Template Library), которая развивается на основе стандарта ANSI C++.

Первой ключевой возможностью STL является отделение структур данных от алгоритмов или оперирующих ?????
Вторая ключевая возможность STL состоит в том, что библиотека не является объектно-ориентированной.
В STL имеются несколько иерархий класса, которые основаны на шаблонах, а не на инкапсуляции наследования ???????. Такая низкоуровневая природа библиотеки позволяет ей быть по-настоящему универсальной и позволяет получать более компактный код.

Загрузка...