Октябрь 2007 1 Обработка исключений. Октябрь 20072 Основные вопросы Понятие исключительной ситуации. Понятие исключительной ситуации. Проблемы при описании.

Презентация:



Advertisements
Похожие презентации
24. Обработка исключений Основные вопросы Понятие исключительной ситуации. Проблемы при описании и обработке исключительных ситуаций обычными.
Advertisements

Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Программирование Часть 8 Обработка исключений.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Прерывания Определение прерывания Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Лекция 3. Исключения и прерывания в встроенных системах.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
С++, ООП Семинар 2 Рябова Анна Сергеевна
Подпрограммы. Функции и процедуры. Кулебякин В.В.
Процедуры и функции. Разработал учитель информатики МБОУ СОШ 50 г. Краснодара Ракута Елизавета Григорьевна « Учиться и, когда придет время, прикладывать.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Транксрипт:

Октябрь Обработка исключений

Октябрь Основные вопросы Понятие исключительной ситуации. Понятие исключительной ситуации. Проблемы при описании и обработке исключительных ситуаций обычными средствами Проблемы при описании и обработке исключительных ситуаций обычными средствами Идеальный механизм обработки исключений Идеальный механизм обработки исключений Обработка исключений в С++ Обработка исключений в С++ Восстановление процесса вычислений Восстановление процесса вычислений

Октябрь Шаблон для контейнера «Стек» template class Stack{ private: struct DataElement{ T Value; struct DataElement *next; }; DataElement *first; public: Stack(){ first = NULL;} ~Stack(){ while(first != NULL) Pop();} void Push(T value){ DataElement *d = new DataElement(); d->Value = value; d->next = first; first = d; } T Pop(){ if(first == NULL) Тут нужно что-то сделать!!!!; DataElement *d = first; first = first->next; T tmp = d->value; delete d; return tmp; }};

Октябрь Понятие исключительной ситуации Под исключительной ситуацией (исключением) понимается состояние вычислительного процесса с относительно малой вероятностью его возникновения. Под исключительной ситуацией (исключением) понимается состояние вычислительного процесса с относительно малой вероятностью его возникновения. К исключительным относят некоторые ошибочные или крайние ситуации: К исключительным относят некоторые ошибочные или крайние ситуации: сбои в аппаратуре, сбои в аппаратуре, ошибки пользователей в задании исходных данных для программы, ошибки пользователей в задании исходных данных для программы, переполнение или потеря значимости в арифметических операциях, переполнение или потеря значимости в арифметических операциях, несоответствие типа переменной типу присваиваемого этой переменной значения, несоответствие типа переменной типу присваиваемого этой переменной значения, попытки получения доступа к защищенным данным или другим ресурсам, попытки получения доступа к защищенным данным или другим ресурсам, нехватка данных во входном файле, нехватка данных во входном файле, внешние воздействия на программу со стороны оператора ЭВМ или других программ внешние воздействия на программу со стороны оператора ЭВМ или других программ и т.п. и т.п. Для обработки исключений, как правило, необходимо существенного изменить общий ход вычислительного процесса. Для обработки исключений, как правило, необходимо существенного изменить общий ход вычислительного процесса. Чтобы обеспечить продолжение работы программы или по крайней мере ограничить последствия исключительных ситуаций, программист должен предусматривать их специальную обработку. Чтобы обеспечить продолжение работы программы или по крайней мере ограничить последствия исключительных ситуаций, программист должен предусматривать их специальную обработку.

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

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

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

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

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

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

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

Октябрь Обработка исключений в различных языках Пересылка вспомогательного параметра, который используется в качестве переменной состояния. Пересылка вспомогательного параметра, который используется в качестве переменной состояния. Используется в библиотечных функциях С Используется в библиотечных функциях С Передача в подпрограмму метки в качестве параметра. Передача в подпрограмму метки в качестве параметра. можно сделать только в языках, допускающих использование меток в качестве параметра. можно сделать только в языках, допускающих использование меток в качестве параметра. Передача метки позволяет вызываемому модулю передать управление в другую точку вызывающего модуля, если возникает исключительная ситуация. Передача метки позволяет вызываемому модулю передать управление в другую точку вызывающего модуля, если возникает исключительная ситуация. Такое использование меток является общепринятым в языке FORTRAN. Такое использование меток является общепринятым в языке FORTRAN. Третий способ создать обработчик в виде отдельной подпрограммы, передаваемой в качестве параметра в вызываемый модуль. Третий способ создать обработчик в виде отдельной подпрограммы, передаваемой в качестве параметра в вызываемый модуль. Одна из проблем, связанных с таким подходом, заключается в том, что передачу подпрограммы-обработчика следует выполнять при каждом вызове, независимо от того, желательно это или нет. Одна из проблем, связанных с таким подходом, заключается в том, что передачу подпрограммы-обработчика следует выполнять при каждом вызове, независимо от того, желательно это или нет. Более того, чтобы обрабатывать несколько видов исключительных ситуаций, необходимо было бы передавать несколько разных модулей-обработчиков, усложняя код. Более того, чтобы обрабатывать несколько видов исключительных ситуаций, необходимо было бы передавать несколько разных модулей-обработчиков, усложняя код.

Октябрь Обработка исключений в С++ Исключения C++ не поддерживают обработку асинхронных событий, таких, как ошибки оборудования или обработку прерываний, например, нажатие клавиш Ctrl+C. Исключения C++ не поддерживают обработку асинхронных событий, таких, как ошибки оборудования или обработку прерываний, например, нажатие клавиш Ctrl+C. Механизм исключений предназначен только для событий, которые происходят в результате работы самой программы и указываются явным образом. Механизм исключений предназначен только для событий, которые происходят в результате работы самой программы и указываются явным образом. Исключения возникают тогда, когда некоторая часть программы не смогла сделать то, что от нее требовалось. При этом другая часть программы может попытаться сделать что-нибудь иное. Исключения возникают тогда, когда некоторая часть программы не смогла сделать то, что от нее требовалось. При этом другая часть программы может попытаться сделать что-нибудь иное. Исключения позволяют логически разделить вычислительный процесс на две части обнаружение аварийной ситуации и ее обработка. Исключения позволяют логически разделить вычислительный процесс на две части обнаружение аварийной ситуации и ее обработка. Главной причиной является то, что функция, обнаружившая ошибку, может не знать, что предпринимать для ее исправления, а использующий эту функцию код может знать, что делать, но не уметь определить место возникновения. Главной причиной является то, что функция, обнаружившая ошибку, может не знать, что предпринимать для ее исправления, а использующий эту функцию код может знать, что делать, но не уметь определить место возникновения. Это особенно актуально при использовании библиотечных функций и программ, состоящих из многих модулей. Это особенно актуально при использовании библиотечных функций и программ, состоящих из многих модулей. Для передачи информации об ошибке в вызывающую функцию не требуется применять возвращаемое значение, параметры или глобальные переменные, поэтому интерфейс функций не раздувается. Для передачи информации об ошибке в вызывающую функцию не требуется применять возвращаемое значение, параметры или глобальные переменные, поэтому интерфейс функций не раздувается.

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

Октябрь Контролируемый блок Ключевое слово try служит для обозначения контролируемого блока кода, в котором может генерироваться исключение. Блок заключается в фигурные скобки: Ключевое слово try служит для обозначения контролируемого блока кода, в котором может генерироваться исключение. Блок заключается в фигурные скобки: try{ …} Все функции, прямо или косвенно вызываемые из try-блока, также считаются ему принадлежащими. Все функции, прямо или косвенно вызываемые из try-блока, также считаются ему принадлежащими.

Октябрь Порождение исключения Генерация (порождение) исключения происходит по ключевому слову throw, которое употребляется либо с параметром, либо без него: Генерация (порождение) исключения происходит по ключевому слову throw, которое употребляется либо с параметром, либо без него: throw [ выражение ]; Тип выражения, стоящего после throw, определяет тип порождаемого исключения. Тип выражения, стоящего после throw, определяет тип порождаемого исключения. При генерации исключения выполнение текущего блока прекращается, и происходит поиск соответствующего обработчика и передача ему управления. При генерации исключения выполнение текущего блока прекращается, и происходит поиск соответствующего обработчика и передача ему управления. Не всегда исключение, возникшее во внутреннем блоке, может быть сразу правильно обработано. В этом случае используются вложенные контролируемые блоки, и исключение передается на более высокий уровень с помощью ключевого слова throw без параметров. Не всегда исключение, возникшее во внутреннем блоке, может быть сразу правильно обработано. В этом случае используются вложенные контролируемые блоки, и исключение передается на более высокий уровень с помощью ключевого слова throw без параметров.

Октябрь Пример порождения исключения template class Stack{ private: struct DataElement{ T Value; struct DataElement *next; }; DataElement *first; public: Stack(){ first = NULL;} ~Stack(){ while(first != NULL) Pop();} void Push(T value){ DataElement *d = new DataElement(); d->Value = value; d->next = first; first = d; } T Pop(){ if(first == NULL) throw «Стек пуст»; DataElement *d = first; first = first->next; T tmp = d->value; delete d; return tmp; }};

Октябрь Обработчики исключений Обработчики исключений начинаются с ключевого слова catch, за которым в скобках следует тип обрабатываемого исключения. Они должны располагаться непосредственно за try-блоком. Обработчики исключений начинаются с ключевого слова catch, за которым в скобках следует тип обрабатываемого исключения. Они должны располагаться непосредственно за try-блоком. Можно записать один или несколько обработчиков в соответствии с типами обрабатываемых исключений. Синтаксис обработчиков напоминает определение функции с одним параметром типом исключения. Можно записать один или несколько обработчиков в соответствии с типами обрабатываемых исключений. Синтаксис обработчиков напоминает определение функции с одним параметром типом исключения. Существует три формы записи: Существует три формы записи: catch(тип имя){... /* тело обработчика */ } catch(тип имя){... /* тело обработчика */ } имя параметра используется в теле обработчика для выполнения каких-либо действий например, вывода информации об исключении. имя параметра используется в теле обработчика для выполнения каких-либо действий например, вывода информации об исключении. catch(Tип){... /* тело обработчика */ } catch(Tип){... /* тело обработчика */ } не предполагает использования информации об исключении, играет роль только его тип не предполагает использования информации об исключении, играет роль только его тип catch(...){... /* тело обработчика */ } catch(...){... /* тело обработчика */ } Многоточие вместо параметра обозначает, что обработчик перехватывает все исключения. Многоточие вместо параметра обозначает, что обработчик перехватывает все исключения. Так как обработчики просматриваются в том порядке, в котором они записаны, обработчик третьего типа следует помещать после всех остальных. Так как обработчики просматриваются в том порядке, в котором они записаны, обработчик третьего типа следует помещать после всех остальных.

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

Октябрь Перехват исключений Термин стек вызовов обозначает последовательность вызванных, но еще не завершившихся функций. Термин стек вызовов обозначает последовательность вызванных, но еще не завершившихся функций. Раскручиванием стека называется процесс освобождения памяти из-под локальных переменных и возврата управления вызывающей функции. Раскручиванием стека называется процесс освобождения памяти из-под локальных переменных и возврата управления вызывающей функции. Когда функция завершается, происходит естественное раскручивание стека. Тот же самый механизм используется и при обработке исключений. Когда функция завершается, происходит естественное раскручивание стека. Тот же самый механизм используется и при обработке исключений. Когда с помощью throw генерируется исключение, функции исполнительной библиотеки C++ выполняют следующие действия: Когда с помощью throw генерируется исключение, функции исполнительной библиотеки C++ выполняют следующие действия: 1. создают копию параметра throw в виде статического объекта, который существует до тех пор, пока исключение не будет обработано; 2. в поисках подходящего обработчика раскручивают стек, вызывая деструкторы локальных объектов, выходящих из области действия; 3. передают объект и управление обработчику, имеющему параметр, совместимый по типу с этим объектом.

Октябрь Пример обработки исключений (1) #include #include class Hello{ public: Hello(){cout « "Hello!" « endl;} ~Hello(){cout « "Bye!" « endl;} }; void fl(){ ifstream ifs(BAD_FILE_NAME"); if (!ifs){ cout « "Генерируем исключение" « endl: throw "Ошибка при открытии файла; }} void f2(){ Hello H; // Создаем локальный объект fl(); // Вызываем функцию, генерирующую исключение }

Октябрь Пример обработки исключений (2) int main(){ try{ cout « "Входим в try-блок" « endl; f2(); cout « "Выходим из try-блока" « endl; } catch(int i){ cout « "Вызван обработчик int. исключение - " « i « endl; return -1; } catch(const char * p){ cout « "Вызван обработчик const char*, исключение - cout « "Вызван обработчик const char*, исключение - « p « endl; return -1; } catch(...){ cout « "Вызван обработчик всех исключений" « endl; return -1: } return 0; }

Октябрь Пример обработки исключений (3) Результаты выполнения программы: Результаты выполнения программы: Входим в try-блок Входим в try-блок Hello! Hello! Генерируем исключение Генерируем исключение Bye! Bye! Вызван обработчик const char *, исключение - Ошибка при открытии файла Вызван обработчик const char *, исключение - Ошибка при открытии файла После порождения исключения был вызван деструктор локального объекта, хотя управление из функции f 1 было передано обработчику находящемуся в функции main. После порождения исключения был вызван деструктор локального объекта, хотя управление из функции f 1 было передано обработчику находящемуся в функции main. Сообщение «Выходим из try-блока» не было ведено. Сообщение «Выходим из try-блока» не было ведено.

Октябрь Свойства механизма обработки исключений С++ Механизм исключений позволяет корректно уничтожать объекты при возникновении ошибочных ситуаций. Механизм исключений позволяет корректно уничтожать объекты при возникновении ошибочных ситуаций. Исключение может быть как стандартного, так и определенного пользователем типа. При этом нет необходимости определять это тип глобально достаточно, чтобы он был известен в точке порождения исключения и в точке его обработки. Исключение может быть как стандартного, так и определенного пользователем типа. При этом нет необходимости определять это тип глобально достаточно, чтобы он был известен в точке порождения исключения и в точке его обработки. Класс для представления исключения можно объявить внутри класса, при работе с которым оно может возникать. Класс для представления исключения можно объявить внутри класса, при работе с которым оно может возникать. Конструктор копирования этого класса должен быть объявлен как public, поскольку иначе будет невозможно создать копию объекта при генерации исключения. Конструктор копирования этого класса должен быть объявлен как public, поскольку иначе будет невозможно создать копию объекта при генерации исключения.

Октябрь Исключения в конструкторах и деструкторах Язык C++ не позволяет возвращать значение из конструктора и деструктора. Язык C++ не позволяет возвращать значение из конструктора и деструктора. Механизм исключений дает возможность сообщить об ошибке, возникшей в конструкторе или деструкторе объекта. Механизм исключений дает возможность сообщить об ошибке, возникшей в конструкторе или деструкторе объекта. Этот же механизм можно использовать в функциях, которые не возвращают значений или должны возвращать значения определенного типа. Этот же механизм можно использовать в функциях, которые не возвращают значений или должны возвращать значения определенного типа.

Октябрь Пример использования исключений в конструкторе const int MaxVectorSize = 32000; class Vector{ public: class Size{};// Класс исключения Vector(int n){ if (n MaxVectorSize) throw Size;......} При использовании класса Vector можно предусмотреть перехват исключений типа Size. try{ Vector *p = new Vector(i); } catch(Vector::Size){... // Обработка ошибки размера вектора }

Октябрь Свойства исключений в конструкторе Если в конструкторе объекта генерируется исключение, автоматически вызываются деструкторы для полностью созданных в этом блоке к текущему моменту объектов, а также для полей данных текущего объекта, являющихся объектами, и для его базовых классов. Если в конструкторе объекта генерируется исключение, автоматически вызываются деструкторы для полностью созданных в этом блоке к текущему моменту объектов, а также для полей данных текущего объекта, являющихся объектами, и для его базовых классов. Например, если исключение возникло при создании массива объектов, деструкторы будут вызваны только для успешно созданных элементов. Например, если исключение возникло при создании массива объектов, деструкторы будут вызваны только для успешно созданных элементов. Если объект создается в динамической памяти с помощью операции new и в конструкторе возникнет исключение, память из-под объекта корректно освобождается. Если объект создается в динамической памяти с помощью операции new и в конструкторе возникнет исключение, память из-под объекта корректно освобождается.

Октябрь Передача дополнительной информации об исключении Для передачи дополнительной информации об возможном исключении можно создать собственный класс. Для передачи дополнительной информации об возможном исключении можно создать собственный класс. class Exept{ public: int type; // тип исключения char msg[256];// сообщение для пользователя Exept(int type,char *msg){ this->type= type; strcpy(this->msg, msg); }}; void f1(){ … throw Exept(1,Не могу открыть файл); … throw Exept(10,Деление на 0); } int main(){ try{f1();} catch(Exept ex){ switch(ex.type){ case 1: … case … }}

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

Октябрь Пример иерархии исключений classMatherr{}; classOverflow: public Matherr{}; // Переполнение classUnderflow: public Matherr{}; // Исчезновение порядка classZeroDivide: public Matherr{}; // Деление на ноль classIOerr{}; classReaderr:public IOerr{};// Ошибка чтения classWriterr:public IOerr{};// Ошибка записи classSeekerr:public IOerr{};// Ошибка поиска int main(){ try{…}catch(IOErr){…} catch(Overflow){ …}}

Октябрь Вопросы к экзамену Обработка исключительных ситуаций. Основные понятия. Проблемы при описании и обработке исключительных ситуаций. Требования к идеальному механизму обработки исключительных ситуаций. Обработка исключительных ситуаций в различных языках программирования. Обработка исключительных ситуаций. Основные понятия. Проблемы при описании и обработке исключительных ситуаций. Требования к идеальному механизму обработки исключительных ситуаций. Обработка исключительных ситуаций в различных языках программирования. Обработка исключительных ситуаций в С++. Обработка исключительных ситуаций в С++. Особенности, механизм, синтаксис. Примеры. Особенности, механизм, синтаксис. Примеры. Исключительные ситуации в конструкторах. Создание собственных классов исключений. Иерархии исключений. Примеры. Исключительные ситуации в конструкторах. Создание собственных классов исключений. Иерархии исключений. Примеры.