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

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Исключения. Исключительные ситуации абсолютно бесплатно. Урок-презентация на эту тему содержит всего 29 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Исключения. Исключительные ситуации



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    29 слайдов
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    190.14 kB
  • Просмотров:
    49
  • Скачиваний:
    0
  • Автор:
    неизвестен



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

№1 слайд
Тема Исключения
Содержание слайда: Тема 10 Исключения

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

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

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

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

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

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

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

№9 слайд
Пример выброса исключения
Содержание слайда: Пример выброса исключения (системные исключения) int x = 0; try { cout <<2/x; // Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (...) { cout << "Division by zero" << endl; } Для корректной работы этого примера необходимо включить режим компиляции /EHa

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

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

№12 слайд
Пример выброса исключения
Содержание слайда: Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (...) { cout << “Everything fail!” << endl; }

№13 слайд
Пример выброса исключения
Содержание слайда: Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (int) { cout << ”Int type exception was thrown!” << endl; } catch (...) { cout << ”Everything fail!” << endl; // этот блок не будет работать }

№14 слайд
Пример выброса исключения
Содержание слайда: Пример выброса исключения (собственные исключения) try { … throw 0; //Здесь произойдет выброс исключения // Последующие операторы выполняться не будут } catch (int e) { cout << ”Int type exception was thrown, code is ” << e << endl; } catch (...) { cout << ”Everything fail!” << endl; // этот блок не будет работать }

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

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

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

№18 слайд
Работающие обработчики
Содержание слайда: Работающие обработчики исключений (пример 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) {… } … } //внешний try catch (char * c) {… } catch (...) { … }

№20 слайд
Работающие обработчики
Содержание слайда: Работающие обработчики исключений (пример 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) {… } … } //внешний try catch (char * c) {… } catch (...) { … }

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

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

№24 слайд
Собственная функция
Содержание слайда: Собственная функция аварийного завершения Можно зарегистрировать с помощью функции set_terminate свою функцию, которая будет выполняться перед аварийным завершением работы: void MyTerminate() { cout << "An error occured!" << endl; exit(-1); } int main () { set_terminate(MyTerminate); … throw 0; }

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

№26 слайд
Трансляция исключений
Содержание слайда: Трансляция исключений Транслятор исключений – пользовательская 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); После этого транслятор получает управление при каждом выбросе системного исключения. Транслятор – не обработчик исключения! По завершению его работы выполняется стандартные действия по обработке исключения!

№28 слайд
Преобразование системных
Содержание слайда: Преобразование системных исключений в пользовательские 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 << 2/x; *px=0; }

№29 слайд
Преобразование системных
Содержание слайда: Преобразование системных исключений в пользовательские (продолжение) catch (unsigned e) { switch (e) { case EXCEPTION_INT_DIVIDE_BY_ZERO: cout << "Division by zero" << endl; break; case EXCEPTION_ACCESS_VIOLATION: cout << "Invalid pointer assignement" << endl; break; } } return 0; }

Скачать все slide презентации Исключения. Исключительные ситуации одним архивом: