Глава 10. Объектно-ориентированное программирование
e l s e c o u t << "КОМАНДА " << i << " ОТМЕНЕНА\ n " ;
}
catch ( unknown_exception ) {
c o u t << "Неизвестный ответ пользователя\ n " ;
i −−; // возвращаемся к предыдущей команде
}
catch ( a b o r t _ e x c e p t i o n ) {
c o u t << "Выполняется немедленный выход из программы\ n " ;
return 0 ;
}
c o u t << "Продолжение демонстрации диалога\ n " ;
}
}
Как видно из примера, обработчики исключений должны следовать друг
за другом каждый в своём блоке catch(). После того, как отработает один из
обработчиков, управление передастся на код, следующий за последним блоком
catch()
в данной цепочке.
Обратите внимание, что в блоке catch() мы указали в качестве параметра
только тип данных — класс-индикатор. Это допустимо с учётом того, что об-
работчик исключения не собирается извлекать никаких данных из переданного
индикатора, да и сами классы-индикаторы, созданные в программе, являются
пустыми и используются только для того, чтобы различать исключительные си-
туации.
10.5.2
Передача информации в обработчик
Как уже упоминалось, чтобы передать в обработчик дополнительную инфор-
мацию, нужно принимать в блоке catch() не тип данных, а переменную. Перед
выбрасыванием исключения можно её проинициализировать конкретными дан-
ными, а потом прочитать эти данные в обработчике.
Приведём в качестве иллюстрации ещё один пример, в котором реализован
класс array, предоставляющий пользователю массив с возможностью добавле-
ния и удаления элементов в стиле работы со стеком. Для этого класса будет
перегружен оператор индекса [], возвращающий значение элемента с заданным
номером, а также две функции для изменения размера массива: push(), позво-
ляющая добавить новый элемент в конец массива, и pop(), забирающая из мас-
сива последний добавленный элемент. При создании объекта для массива будет
резервироваться память, для чего конструктору будет передаваться параметр
capacity
— ёмкость массива, т. е. максимально допустимое число элементов.
#include #include