Содержание
- 2. Сложность задачи обработки ошибочных ситуаций Концепция программирования с защитой от ошибок Что считать ошибкой? «Полицейский» принцип
- 3. Проблема обработки ошибок Главная проблема обработки исключительных ситуаций состоит в том, что разработчику библиотеки классов просто
- 4. Идея обработки исключений в С++ Пространственное разделение события возникновения исключения и его обработки Понятие исключения, как
- 5. Пример заявления исключения типа const char* class String { public: // ……………………… char& operator[ ] (
- 6. Использование кода прячем в try-блок void foo( String& s ) { // . . . try
- 7. Синтаксические элементы и правила Слова throw, try и catch являются ключевыми словами языка С++ Конструкция catch
- 8. Раскручивание стека вызовов Процесс генерации и последующей обработки исключений требует поиска соответствующего обработчика от точки возникновения
- 9. Изменение стека вызовов – I void func2( ) { int i=256; } void func1( ) {
- 10. Изменение стека вызовов – II void func2( ) { int i=256; } void func1( ) {
- 11. Изменение стека вызовов – III void func2( ) { int i=256; } void func1( ) {
- 12. Механизмы раскручивания программного стека Естественное, в процессе выполнения программы; Связанное с обработкой исключительных ситуаций; Путем применения
- 13. Обрабатываются только исключения, явно генерируемые некоторой функцией; Поддерживается окончательная модель обработки (т.е. после возникновения исключения невозможно
- 14. Если заявлено исключение, для которого нет обработчика в цепочке вызовов, программа будет завершена. В процессе поиска
- 15. Если после заявления исключения управление передано catch-блоку, то вне зависимости от результата последующих действий исключение считается
- 16. Обработка исключений и традиционные способы защиты «Полицейский» подход можно быть и поумнее соответствует случаю отсутствия обработчика
- 17. Нормальное завершение с установкой внешнего признака ошибки (errno) ошибка м.б. незамечена сколько признаков надо иметь? Вызвать
- 18. Что такое исключение? Исключение выступает одновременно как переменная и как тип данных (или как объект и
- 19. Генерирование исключений При генерации исключения (throw) функции библиотеки исполняющей системы осуществляют следующие действия Создается и запоминается
- 20. Распознавание исключений Управление передается ближайшему catch-обработчику, совместимому с типом выброшенного исключения При этом копия объекта-исключения передается,
- 21. Обработка исключений Обработчик считается найденным, а исключение обработанным, если: тип исключения соответствует типу, ожидаемому в обработчике.
- 22. Обработчик по умолчанию Обработчик по умолчанию вызывается для исключения любого типа и имеет вид catch( ...
- 23. Пример Пусть класс Vector должен обнаруживать ошибки индексации и выделения памяти class Vector { public: class
- 24. Пример (продолжение) Vector::Vector (int size) { if( !(v=new int[size]) ) throw Memory(); else { lbound =
- 25. Пример (продолжение) Пользователь класса Vector может различить два исключения, включив два обработчика: void f(void) { try{
- 26. Повторное заявление исключений Исключение считается обработанным сразу после входа в обработчик. Поэтому try{ do_something(); } catch(
- 27. Вложенные обработчики try { // . . . . . } catch( type ) { try
- 28. Тип и значение исключений При выходе индекса за границы можно передать ошибочное значение class Vector {
- 29. int& Vector::operator[ ](int i) { if( i else return v[i-lbound]; } void f( Vector& v )
- 30. Группировка исключений enum MathError { Overflow, Underflow, Zerodivide, /*. . . */ }; // . .
- 31. Иерархия исключений Объектно-ориентированный подход дает лучшее решение class MathError { }; class Overflow : public MathError
- 32. Далее… try { // . . . . . } catch( Overflow ) { // обработка
- 34. Скачать презентацию