Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 318; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.