КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Catch( тип2 аргумент )
{ // код обработки } ... Оператор throw. Предназначен для явной генерации исключительной ситуации. throw аргумент; Особенности: · генерирует исключительную ситуацию с типом,соответствующим типу аргумента · значение аргумента throw передается аргументу оператора catch соответствующего типа
2.18 Блок try. Код, подлежащий контролю, должен выполнятся внутри блока try. Особенности: · число операторов внутри блока значения не имеет · код в блоке выполняется до возникновения исключительнйо ситуации · если есть подходящий для обработки исключения catch, то программа переходит к его выполнению · если отсутствует подходящий оператор catch, то при этом автоматически вызывается функция terminate() или abort(). 2.19 Оператор catch. Содержит код обработки исключительной ситуации. Особенности: · получает управление только при возникновении исключительной ситуации в расположенном выше блоке try · если ошибку исправить невозможно, то необходимо в catch явно прервать программу или сгенерировать новую исключительную ситуацию · если обработка не требует завершения программы, то после блока catch програма продолжит выполнение со следующего после него оператора · оператор catch начинает выполняться только если тип его аргумента совпадает с типом исключительной ситуации · при перехвате исключительных ситуаций аргументу catch присваивается некоторое значение (аргумент может быть объектом встроенного типа или класса) 2.20 Перехват исключений базового и производного классов. · оператор catch, перехватывающий исключения типа базового класса, также перехватывает исключения всех производных типов этого класса · для перехвата исключения только ПРОИЗВОДНОГО класса в последоавтельности операторов catch тип базового класса должен стоять позже типа производного
· компилятор может дать предупреждение, если обработчик базового класса расположен раньше производного
2.21 Перехват всех исключительных ситуаций происходит с помощью оператора catch (...) { /*... */ } · используется если нет особенностей перехвата разнотипных исключительых ситуаций · ставится последним в цепочке операторов для упрощения цепочки перехвата и исключения неконтролируемого аварийного завершения программы 2.22 Перехват классов исключительных ситуаций. Так как исключительная ситуация может иметь любой тип,то в практических приложениях чаще используются исключительные ситуации, определенные программистом. Особенности: · классы позволяют более полно описать возникшую ошибку · инкапсулирование информации об ошибке в таком классе позволяет пояснить ошибку пользователю или даже ее исправить · можно использовать стандартный класс и функции, определенные в <exception> Ограничение исключительных ситуаций. Можно ограничить виды типовисключительных ситуаций, которые может генерировать функция в программе: тип имя_функции (аргументы) throw (список_типов) { //... } Особенности: · функция может генерировать только исключительные ситуации типов, перечисленных в списке · при генерации исключительной ситуации другого типа выполняется аварийное завершение программы (unexpected()) · можно задать пустой список типов
2.23 Функция terminate () void terminate(); Особенности: · вызывается автоматически, если не обнаружен подходящий оператор catch · является последним средством обработки исключительных ситуации · по умолчанию вызывает функцию abort () · можно изменить обработчик функции используя terminate_handler set_terminate (terminate_handler new handler) throw () однако он должен заканчиваться функцией abort()
#include <exception> void my_terminate() { cout<<”program aborted””<<endl; abort(); } int main() { set_terminate(my_terminate); try{ cout<<”generate exception int”<<endl; throw 1; }catch(double i) { cout << ”exception(double)”<<end; } return 0; }
Функция unexpected() void unexpected() Особенности: · вызывается автоматически при попытке сгенерировать исключительную ситуацию, не указанную в разделе throw · по умолчанию вызывает функцию terminate() · можно изменить обработчик функции, используя unexpected_handler set_unexpected (unexpected_handler newhandler) throw () Однако он должен заканчиваться вызовом terminate() 2.24 В С++ для поддержки динамического полиморфизма используются: · динамическая идентификация типа RTTI (run-time type specification) - позволяет идентифицировать тип объекта при выполнении программы · дополнительные операторы приведения типов - обеспечивают более безопасный способ приведения типов Динамическая идентификация типа добавлена в связи с неободимостью определения типов объектов при выполнении программы. Такая ситуация возникает при реализации полиморфизма с помощью иерархий класов, вирутальных функций. указателей на базовые классы. Оператор typeid. Для идентификации типа предназначен оператор typeid (object); typeid (type); Особенности: · определен в заголовке <typeinfo> · object - объект, для которого выполняется ижентификация типа · type - тип, для которого требуется получить описание · оператор возвращает const type_info& - константную ссылку на объект типа type_info Класс type_info. Предназначен для описания типа объекта. Получить объект этого класса можно только с использованием оператора typeid. 2.25 Оператор typeid может применяться к шаблонным классам. Особенности: · тип объекта определяется также тем, какие данные используются в качестве шаблонных параметров при создании конкретного объекта · если для одного и того же шаблонного класса типы параметров не совпадают, то типы классов считаются разными
#include <iostream> #include <typeinfo> using namespace std; template < class T1, class T2> class myclass{
Дата добавления: 2015-03-29; Просмотров: 324; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |