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

Нажмите для полного просмотра!
Исключения. Исключительные ситуации, слайд №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

Содержание

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

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


Слайд 1


Тема 10 Исключения
Описание слайда:
Тема 10 Исключения

Слайд 2


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

Слайд 3


Классификация исключительных ситуаций В системе программирования Visual Studio 2008 (2010, 2013) различают два типа исключений: исключения C++;...
Описание слайда:
Классификация исключительных ситуаций В системе программирования Visual Studio 2008 (2010, 2013) различают два типа исключений: исключения C++; системные исключения. Первый тип исключений генерируется в самой программе инструкцией throw. Второй тип исключений генерируется операционной системой. Такие исключения также называют асинхронными (asynchronous exceptions).

Слайд 4


Режимы компиляции для работы с исключительными ситуациями Для того чтобы обеспечить перехват исключений C++, необходимо включить режим компиляции...
Описание слайда:
Режимы компиляции для работы с исключительными ситуациями Для того чтобы обеспечить перехват исключений C++, необходимо включить режим компиляции /EHsc, а для перехвата исключений любого типа – режим /EHa. Кроме того, для перехвата системных исключений, связанных с обработкой данных с плавающей точкой, следует включить режим /fp:except.

Слайд 5


Переключение режимов компиляции для перехвата исключений
Описание слайда:
Переключение режимов компиляции для перехвата исключений

Слайд 6


Инструкции С++ для работы с исключительными ситуациями Язык C++ включает следующие возможности для работы с исключениями: создание защищенных блоков...
Описание слайда:
Инструкции С++ для работы с исключительными ситуациями Язык C++ включает следующие возможности для работы с исключениями: создание защищенных блоков (try-блок) и перехват исключений (catch-блок); инициализация исключений (инструкция throw).

Слайд 7


Защищённый блок Простейший формат защищенного блока имеет вид try {операторы_защищенного_блока} catch(...) {обработчик_исключительной_ситуации}...
Описание слайда:
Защищённый блок Простейший формат защищенного блока имеет вид try {операторы_защищенного_блока} catch(...) {обработчик_исключительной_ситуации} Многоточие является частью синтаксиса языка!

Слайд 8


Механизм работы защищённого блока Выполняются инструкции, входящие в состав блока try (защищенный блок). Если при их выполнении исключение не...
Описание слайда:
Механизм работы защищённого блока Выполняются инструкции, входящие в состав блока try (защищенный блок). Если при их выполнении исключение не возбуждается (в C++ чаще используется термин «выброс исключения»), то блок catch пропускается. При выбросе исключения выполнение защищенного блока прекращается, и начинают работать инструкции, записанные в блоке catch. После окончания работы блока catch исключение считается обработанным, и управление передается на первую инструкцию, следующую за конструкцией try …catch.

Слайд 9


Пример выброса исключения (системные исключения) int x = 0; try { cout
Описание слайда:
Пример выброса исключения (системные исключения) int x = 0; try { cout

Слайд 10


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

Слайд 11


Полный формат защищённого блока try {операторы_защищенного_блока} catch-блоки Catch-блок имеет один из следующих форматов: catch (тип)...
Описание слайда:
Полный формат защищённого блока try {операторы_защищенного_блока} catch-блоки Catch-блок имеет один из следующих форматов: catch (тип) {обработчик_исключения} catch (тип идентификатор) {обработчик_исключения} catch (...) {обработчик_исключения} Первый формат используется, если нам надо указать тип перехватываемого исключения, но не нужно обрабатывать связанное с этим исключением значение (это достигается при использовании второго формата оператора catch). Наконец, третий формат оператора catch позволяет обработать все исключения (в том числе и системные).

Слайд 12


Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не...
Описание слайда:
Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (...) { cout

Слайд 13


Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не...
Описание слайда:
Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (int) { cout

Слайд 14


Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не...
Описание слайда:
Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (int e) { cout

Слайд 15


Последовательность действий при обработке исключений Создается статическая переменная со значением, заданным в операторе throw. Она будет...
Описание слайда:
Последовательность действий при обработке исключений Создается статическая переменная со значением, заданным в операторе throw. Она будет существовать до тех пор, пока исключение не будет обработано. Завершается выполнение защищенного try-блока: раскручивается стек подпрограмм, корректно уничтожаются объекты, время жизни которых истекает и т.д. Выполняется поиск первого из catch-блоков, который пригоден для обработки созданного исключения.

Слайд 16


Последовательность действий при обработке исключений (продолжение) Поиск catch-блоков ведется по следующим критериям: тип, указанный в catch-блоке,...
Описание слайда:
Последовательность действий при обработке исключений (продолжение) Поиск catch-блоков ведется по следующим критериям: тип, указанный в catch-блоке, совпадает с типом созданного исключения, или является ссылкой на этот тип; указатель, заданный в операторе throw, может быть преобразован по стандартным правилам к указателю, заданному в catch-блоке. в операторе throw задано многоточие. Если нужный обработчик найден, то ему передается управление и, при необходимости, значение, вычисленное в операторе throw. Оставшиеся catch-блоки игнорируются.

Слайд 17


Последовательность действий при обработке исключений (продолжение) Если ни один из catch-блоков, указанных после защищенного блока, не сработал, то...
Описание слайда:
Последовательность действий при обработке исключений (продолжение) Если ни один из catch-блоков, указанных после защищенного блока, не сработал, то исключение считается необработанным. Его обработка может быть продолжена во внешних блоках try (если они, конечно, есть!). В конце оператора catch может стоять оператор throw без параметров. В этом случае работа catch-блока считается незавершенной а исключение – не обработанным до конца, и происходит поиск соответствующего обработчика на более высоких уровнях.

Слайд 18


Работающие обработчики исключений (пример 1) try { … try { … throw ”Error!”; … } //внутренний try catch (int) {… } catch (float) {… } …} //внешний...
Описание слайда:
Работающие обработчики исключений (пример 1) try { … try { … throw ”Error!”; … } //внутренний try catch (int) {… } catch (float) {… } …} //внешний try catch (char * c) { … } catch (...) { …}

Слайд 19


Работающие обработчики исключений (пример 2) try { … try { … throw ”Error!”; … } //внутренний try catch (char *) {… } catch (float) {… } … }...
Описание слайда:
Работающие обработчики исключений (пример 2) try { … try { … throw ”Error!”; … } //внутренний try catch (char *) {… } catch (float) {… } … } //внешний try catch (char * c) {… } catch (...) { … }

Слайд 20


Работающие обработчики исключений (пример 3) try { … try { … throw ”Error!”; … } //внутренний try catch (char *) {… throw; } catch (float) {… } … }...
Описание слайда:
Работающие обработчики исключений (пример 3) try { … try { … throw ”Error!”; … } //внутренний try catch (char *) {… throw; } catch (float) {… } … } //внешний try catch (char * c) {… } catch (...) { … }

Слайд 21


Работающие обработчики исключений (пример 4) try { … try { … throw ”Error!”; … } //внутренний try catch (void *) {… throw; } catch (float) {… } … }...
Описание слайда:
Работающие обработчики исключений (пример 4) try { … try { … throw ”Error!”; … } //внутренний try catch (void *) {… throw; } catch (float) {… } … } //внешний try catch (char * c) {… } catch (...) { … }

Слайд 22


Работающие обработчики исключений (пример 5) try { … try { … throw ”Error!”; … } //внутренний try catch (void *) {… throw; } catch (float) {… } … }...
Описание слайда:
Работающие обработчики исключений (пример 5) try { … try { … throw ”Error!”; … } //внутренний try catch (void *) {… throw; } catch (float) {… } … } //внешний try catch (...) { … } //ошибочный порядок записи! catch (char * c) {… }

Слайд 23


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

Слайд 24


Собственная функция аварийного завершения Можно зарегистрировать с помощью функции set_terminate свою функцию, которая будет выполняться перед...
Описание слайда:
Собственная функция аварийного завершения Можно зарегистрировать с помощью функции set_terminate свою функцию, которая будет выполняться перед аварийным завершением работы: void MyTerminate() { cout

Слайд 25


Тонкая обработка системных исключений Режим компиляции /EHa позволяет перехватывать и обрабатывать системные исключения, возникающие в процессе...
Описание слайда:
Тонкая обработка системных исключений Режим компиляции /EHa позволяет перехватывать и обрабатывать системные исключения, возникающие в процессе работы программы. Однако обработчик таких исключений помещается в блок catch (…) и не дает возможности определить, какое именно исключение возникло. Для более детальной обработки системных исключений можно воспользоваться механизмом трансляции исключений

Слайд 26


Трансляция исключений Транслятор исключений – пользовательская callback-функция, прототип которой имеет вид void MyTranslator(unsigned err_code,...
Описание слайда:
Трансляция исключений Транслятор исключений – пользовательская callback-функция, прототип которой имеет вид void MyTranslator(unsigned err_code, _EXCEPTION_POINTERS *p); Параметр err_code обозначает тип исключительной ситуации (константа EXCEPTION_INT_DIVIDE_BY_ZERO, например, обозначает попытку деления на ноль в целочисленной арифметике, а константа EXCEPTION_ACCESS_VIOLATION – попытку обратиться к запрещенному адресу памяти). Указатель p содержит адрес структуры, содержащей дополнительную информацию об исключении.

Слайд 27


Трансляция исключений (продолжение) Написанный транслятор необходимо зарегистрировать вызовом функции _set_se_translator(MyTranslator); После этого...
Описание слайда:
Трансляция исключений (продолжение) Написанный транслятор необходимо зарегистрировать вызовом функции _set_se_translator(MyTranslator); После этого транслятор получает управление при каждом выбросе системного исключения. Транслятор – не обработчик исключения! По завершению его работы выполняется стандартные действия по обработке исключения!

Слайд 28


Преобразование системных исключений в пользовательские void MyTranslator(unsigned err_code, _EXCEPTION_POINTERS *p) { throw err_code; } Теперь в...
Описание слайда:
Преобразование системных исключений в пользовательские void MyTranslator(unsigned err_code, _EXCEPTION_POINTERS *p) { throw err_code; } Теперь в блоке catch(unsigned) можно выполнить более тонкую обработку системных исключений: int main() { int x = 0; int *px = NULL; _set_se_translator(MyTranslator); try { // cout

Слайд 29


Преобразование системных исключений в пользовательские (продолжение) catch (unsigned e) { switch (e) { case EXCEPTION_INT_DIVIDE_BY_ZERO: cout
Описание слайда:
Преобразование системных исключений в пользовательские (продолжение) catch (unsigned e) { switch (e) { case EXCEPTION_INT_DIVIDE_BY_ZERO: cout



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