🗊 Презентация Исключения

Категория: Образование
Нажмите для полного просмотра!
Исключения, слайд №1 Исключения, слайд №2 Исключения, слайд №3 Исключения, слайд №4 Исключения, слайд №5 Исключения, слайд №6 Исключения, слайд №7 Исключения, слайд №8 Исключения, слайд №9 Исключения, слайд №10 Исключения, слайд №11 Исключения, слайд №12 Исключения, слайд №13 Исключения, слайд №14 Исключения, слайд №15 Исключения, слайд №16 Исключения, слайд №17 Исключения, слайд №18 Исключения, слайд №19 Исключения, слайд №20 Исключения, слайд №21 Исключения, слайд №22 Исключения, слайд №23 Исключения, слайд №24 Исключения, слайд №25 Исключения, слайд №26 Исключения, слайд №27 Исключения, слайд №28 Исключения, слайд №29 Исключения, слайд №30 Исключения, слайд №31 Исключения, слайд №32 Исключения, слайд №33 Исключения, слайд №34 Исключения, слайд №35 Исключения, слайд №36 Исключения, слайд №37 Исключения, слайд №38

Содержание

Вы можете ознакомиться и скачать презентацию на тему Исключения. Доклад-сообщение содержит 38 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Что такое исключение? Программа может быть правильной. Но при ее работе все равно могут возникать неприятные ситуации, например, отсутствие...
Описание слайда:
Что такое исключение? Программа может быть правильной. Но при ее работе все равно могут возникать неприятные ситуации, например, отсутствие достаточного объема памяти, попытка чтения испорченного файла с диска, переполнение при арифметических операциях и многие другие. Относительно недавно в компиляторах языка С++ появились рекомендованные стандартом ANSI средства для обработки особых ситуаций. Такие ситуации в С++ называют исключительными ситуациями или исключениями (Exceptions). Механизм обработки особых ситуаций присутствовал в разных языках программирования до появления С++. В языке С++ практически любое состояние, достигнутое в процессе выполнения программы, можно заранее определить как особую ситуацию (исключение) и предусмотреть действия, которые нужно выполнить при ее возникновении.

Слайд 2


Общая схема обработки исключений Базовый принцип, на котором основана обработка исключений, — восстановление состояния и выбор альтернативных...
Описание слайда:
Общая схема обработки исключений Базовый принцип, на котором основана обработка исключений, — восстановление состояния и выбор альтернативных действий в случае ошибки. Предположим, в вашей программе имеется некий блок и вы не уверены, что он доработает до конца. При выполнении блока может возникнуть нехватка памяти, или начнутся проблемы с коммуникациями, или нехороший клиентский объект передаст неверный параметр. Разве не хотелось бы написать программу в таком виде: if (блок будет работать) { блок; } else { сделать что-то другое; }

Слайд 3


Новые операторы языка С++ Для реализации механизма обработки исключений в язык С++ введены следующие три ключевых (служебных) слова: try...
Описание слайда:
Новые операторы языка С++ Для реализации механизма обработки исключений в язык С++ введены следующие три ключевых (служебных) слова: try (контролировать), catch (ловить), throw (генерировать, порождать, бросать, посылать, формировать).

Слайд 4


Операторы обработки исключений Служебное слово try позволяет выделить в любом месте исполняемого текста программы так называемый контролируемый блок:...
Описание слайда:
Операторы обработки исключений Служебное слово try позволяет выделить в любом месте исполняемого текста программы так называемый контролируемый блок: try { } Среди операторов, заключенных в фигурные скобки могут быть описания, определения, обычные операторы языка С++ и специальные операторы генерации (порождения, формирования) исключений: throw ; Когда выполняется такой оператор, то с помощью выражения, использован-ного после служебного слова throw, формируется специальный объект, называемый исключением. Исключение создается как статический объект, тип которого определяется типом значения выражения_генерации_ исключения. После формирования исключения исполняемый оператор throw автоматически передает управление (и само исключение как объект) непосредственно за пределы контролируемого блока. В этом месте (за закрывающейся фигурной скобкой) обязательно находятся один или несколько обработчиков исключений, каждый из которых идентифицируется служебным словом catch и имеет в общем случае следующий формат: catch (тип_исключения имя) { }

Слайд 5


Блок обработки исключений Об операторах в фигурных скобках за ключевым словом catch говорят как о блоке обработчика исключений. Обработчик исключений...
Описание слайда:
Блок обработки исключений Об операторах в фигурных скобках за ключевым словом catch говорят как о блоке обработчика исключений. Обработчик исключений (процедура обработки исключений) внешне и по смыслу похож на определение функции с одним параметром, не возвращаю-щей никакого значения. Когда обработчиков несколько, они должны отличаться друг от друга типами исключений. Все это очень похоже на перегрузку функций, когда несколько одноименных функций отличаются спецификациями параметров. Так как исключение передается как объект определенного типа, то именно этот тип позволяет выбрать из нескольких обработчиков соответствующий посланному исключению.

Слайд 6


Общий синтаксис перехвата исключений Итак, чтобы перехватить исключение, программа должна представлять собой следующую конструкцию:
Описание слайда:
Общий синтаксис перехвата исключений Итак, чтобы перехватить исключение, программа должна представлять собой следующую конструкцию:

Слайд 7


Синтаксис инициирования исключений Рассмотрим следующий пример:
Описание слайда:
Синтаксис инициирования исключений Рассмотрим следующий пример:

Слайд 8


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 9


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 10


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 11


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 12


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 13


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 14


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 15


Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:
Описание слайда:
Спецификации исключений Спецификации исключений должны подчиняться следующим правилам:

Слайд 16


Спецификации исключений Непредусмотренные исключения - завершение
Описание слайда:
Спецификации исключений Непредусмотренные исключения - завершение

Слайд 17


Если исключение не перехвачено Если для исключения не найдется ни одного обработчика, по умолчанию вызывается глобальная функция terminate(). Другими...
Описание слайда:
Если исключение не перехвачено Если для исключения не найдется ни одного обработчика, по умолчанию вызывается глобальная функция terminate(). Другими словами - если оператор throw использовать вне контролируемого блока, то вызывается специальная функция terminate(), завершающая выполнение программы. По умолчанию terminate() в конечном счете вызывает библиотечную функцию abort(), и дело кончается аварийным завершением всей программы. Можно вмешаться и установить собственную функцию завершения с помощью библиотечной функции set_terminate().

Слайд 18


Вложенная обработка исключений Допускается вложение блоков try/catch.
Описание слайда:
Вложенная обработка исключений Допускается вложение блоков try/catch.

Слайд 19


Вложенная обработка исключений - пример
Описание слайда:
Вложенная обработка исключений - пример

Слайд 20


Внешние исключения не перехватываются! Вы можете перехватить любое исключение, инициированное посредством throw. Тем не менее, существуют и другие...
Описание слайда:
Внешние исключения не перехватываются! Вы можете перехватить любое исключение, инициированное посредством throw. Тем не менее, существуют и другие исключения, которые не удается перехватить переносимыми способами. Например, если пользователь применяет для завершения программы комбинацию клавиш с правым Ctrl, нет гарантии, что операционная система сгенерирует исключение, которое может быть перехвачено вашими обработчиками. Вообще говоря, обработка исключений относится только к исключениям, сгенерированным программой; все остальное непереносимо. Механизм исключений предназначен только для синхронных событий, то есть таких, которые порождаются в результате работы самой программы.

Слайд 21


Конструкторы и деструкторы Одно из принципиальных достоинств стандартной схемы обработки исключений — раскрутка стека (unwinding the stack). При...
Описание слайда:
Конструкторы и деструкторы Одно из принципиальных достоинств стандартной схемы обработки исключений — раскрутка стека (unwinding the stack). При запуске исключения автоматически вызываются деструкторы всех стековых объектов между throw и catch. void fn() throw(int) { Obj aObj; // Что-то не так! Предусматриваем генерацию исключения throw(bad_news); } Когда возникает исключение, до передачи стека соответствующему обработчику будет вызван деструктор aObj.

Слайд 22


Конструкторы и деструкторы - 2 Тот же принцип действует и для try-блока вызывающей стороны. { try { Bar b; fn(); // Вызывает исключение } catch(int...
Описание слайда:
Конструкторы и деструкторы - 2 Тот же принцип действует и для try-блока вызывающей стороны. { try { Bar b; fn(); // Вызывает исключение } catch(int exception) { // Перед тем, как мы попадем сюда, будет вызван деструктор b } } Вообще говоря, гарантируется вызов деструкторов всех стековых объектов, сконструированных с начала выполнения try-блока. Это может пригодиться для закрытия открытых файлов, предотвращения утечки памяти или для других целей. Тем не менее, дело не обходится без некоторых нюансов.

Слайд 23


Стандартные классы исключений Все исключения, генерируемые языком или библиотекой, происходят от единого предка – базового класса exception....
Описание слайда:
Стандартные классы исключений Все исключения, генерируемые языком или библиотекой, происходят от единого предка – базового класса exception. Стандартные классы исключений делятся на три категории:

Слайд 24


Классы исключений языковой поддержки Исключение класса bad_alloc генерируется при неудачном выполнении глобального оператора new (кроме версии new с...
Описание слайда:
Классы исключений языковой поддержки Исключение класса bad_alloc генерируется при неудачном выполнении глобального оператора new (кроме версии new с запретом исключений). Исключение класса bad_cast генерируется оператором dynamic_cast, если преобразование типа по ссылке во время выполнения завершается неудачей. Исключение класса bad_typedid генерируется оператором typeid, предназначенным для идентификации типов во время выполнения. Если аргументом оператора является нуль или null-указатель, то вырабатывается исключение. Исключение класса bad_exception предназначено для обработки непредвиденных исключений. В его обработке задействована функция unexpected().

Слайд 25


Классы исключений стандартной библиотеки Такие исключения обычно бывают производными от класса logic_error. К категории логических ошибок относятся...
Описание слайда:
Классы исключений стандартной библиотеки Такие исключения обычно бывают производными от класса logic_error. К категории логических ошибок относятся ошибки, которые (хотя бы теоретически) можно предотвратить, например дополнительной проверкой аргументов функции. В частности, к логическим ошибкам относятся нарушение логических предусловий или инварианта класса. Исключение класса invalid_argument сообщает о недопустимых значениях аргументов, например, когда битовые поля инициализируются данными при помощи char со значениями, отличными от 0 и 1. Исключение класса length_error сообщает о попытке выполнения операции, нарушающей ограничения допустимого максимального размера, например, при присоединении к строке слишком большого количества символов. Исключение класса out_of_range сообщает о том, что аргумент не входит в интервал допустимых значений, например, неправильный индекс массива. Исключение класса ios_base::failure определено в подсистеме организации потокового ввода/вывода и обычно генерируется при изменении состояния потока из-за ошибки или достижения конца файла.

Слайд 26


Классы исключений для внешних ошибок Исключения, производные от класса runtime_error сообщают о событиях, не контролируемых программой. Исключение...
Описание слайда:
Классы исключений для внешних ошибок Исключения, производные от класса runtime_error сообщают о событиях, не контролируемых программой. Исключение класса range_error сообщает об ошибках выхода за пределы допустимого интервала во внутренних вычислениях. Исключение класса overflow_error сообщает о математическом переполнении. Исключение класса underflow_error сообщает о математической потери значимости.

Слайд 27


Заголовочные файлы классов исключений Базовые классы exception и bad_exception определяются в заголовочном файле . Класс bad_alloc определяется в...
Описание слайда:
Заголовочные файлы классов исключений Базовые классы exception и bad_exception определяются в заголовочном файле . Класс bad_alloc определяется в заголовочном файле . Классы bad_cast и bad_typeid определены в заголовочном файле . Класс ios_base::failure определяется в заголовочном файле . Все остальные классы определены в заголовочном файле .

Слайд 28


Члены классов исключений Обработка исключений в секциях catch обычно происходит через интерфейс исключений. Интерфейс всех стандартных классов...
Описание слайда:
Члены классов исключений Обработка исключений в секциях catch обычно происходит через интерфейс исключений. Интерфейс всех стандартных классов исключений состоит из единственной функции what(). Эта функция возвращает дополнительную информацию о исключении в форме текстовой строки: using namespace std { class exception { virtual const char * what() const throw(); . . . }; } Содержимое строки определяется реализацией. Остальные члены классов предназначены для создания, копирования, присваивания и уничтожения объектов исключений. Никакой другой дополнительной информации (кроме той, что дает what()) о исключении из них достать невозможно!

Слайд 29


Использование классов исключений try { . . . } catch (const std::exception& error) { // Вывод сообщения об ошибке ( что дает реализация) std:: cerr
Описание слайда:
Использование классов исключений try { . . . } catch (const std::exception& error) { // Вывод сообщения об ошибке ( что дает реализация) std:: cerr

Слайд 30


Классы, производные от стандартных исключений При наследовании всегда необходимо обеспечить работу функции what(). namespace MyLib { //...
Описание слайда:
Классы, производные от стандартных исключений При наследовании всегда необходимо обеспечить работу функции what(). namespace MyLib { // Пользовательский класс исключений class MyProblem : public std::exception { public: MyProblem(…) { . . . } // Конструктор . . . virtual const char * what() const throw() // Новая what { . . . } }; . . . void func() { . . . throw MyProblem(…); // Создание и генерация исключения } } // Конец пространства имен MyLib

Слайд 31


Классы, производные от стандартных исключений Еще один вариант – наследник от класса, конструктор которого имеет параметр - строка для функции...
Описание слайда:
Классы, производные от стандартных исключений Еще один вариант – наследник от класса, конструктор которого имеет параметр - строка для функции what(): namespace MyLib { // Пользовательский класс исключений class MyRangeProblem : public std::out_of_range { public: MyRangeProblem(const string& S): out_of_range (S) { } . . . // Конструктор }; void func() { . . . throw MyRangeProblem(” My range problem”); // Создание и генерация исключения } } // Конец пространства имен MyLib

Слайд 32


Тесты … Укажите все утверждения, которые верны относительно следующего кода:
Описание слайда:
Тесты … Укажите все утверждения, которые верны относительно следующего кода:

Слайд 33


Тесты … Укажите все утверждения, которые верны относительно следующего кода:
Описание слайда:
Тесты … Укажите все утверждения, которые верны относительно следующего кода:

Слайд 34


Тесты … Скомпилируется ли следующий код:
Описание слайда:
Тесты … Скомпилируется ли следующий код:

Слайд 35


Тесты … Скомпилируется ли следующий код:
Описание слайда:
Тесты … Скомпилируется ли следующий код:

Слайд 36


Тесты … Сколько раз будет вызвана нешаблонная версия функции func?
Описание слайда:
Тесты … Сколько раз будет вызвана нешаблонная версия функции func?

Слайд 37


Тесты … Сколько раз будет вызвана нешаблонная версия функции func?
Описание слайда:
Тесты … Сколько раз будет вызвана нешаблонная версия функции func?

Слайд 38


Тест с отчетом 3 Варианты ответа: - возникнет ошибка времени выполнения - in A::A() in A::operator=(A) - in A::operator=(A) - in A::A() - возникнет...
Описание слайда:
Тест с отчетом 3 Варианты ответа: - возникнет ошибка времени выполнения - in A::A() in A::operator=(A) - in A::operator=(A) - in A::A() - возникнет ошибка компиляции



Похожие презентации
Mypresentation.ru
Загрузить презентацию