|
Программирование >> Структурное программирование
13.25. Составьте список преимуществ обработки исключений перед обычными средствами обработки ошибок. 13.26. Приведите несколько аргументов в обоснование того, что исключения не должны использоваться как альтернативная форма программного управления. 13.27. Опишите методику обработки родственных исключений. 13.28. До этой главы мы выяснили, что работа с ошибками, обнаруженными конструкторами, несколько затруднительна. Исключения дают нам намного более удобные средства работы с такими ошибками. Рассмотрите конструктор для класса String. Конструктор использует операцию new, чтобы выделить область памяти. Предположите сбой операции new. Покажите, как бы вы поступали в этом случае без обработки исключения. Рассмотрите основные проблемы. Покажите, как бы вы обрабатывали исключение, связанное с подобной нехваткой памяти. Объясните, почему обработка исключения предпочтительнее. 13.29. Предположите, что программа генерирует исключение и начинает выполняться соответствующий обработчик. Теперь предположите, что обработчик исключения сам генерирует такое же исключение. Создает ли это бесконечную рекурсию? Напишите программу на С++, чтобы проверить ваш анализ этой ситуации. 13.30. Используйте наследование, чтобы создать базовый класс исключений и различные производные классы исключений. Затем покажите, что обработчик catch, определяющий базовый класс, перехватывает исключения производных классов. 13.31 Генерация исключений с условным выражением имеет свои сложности. Покажите условное выражение, которое возвращает или тип double, или int. Создайте обработчик catch для перехвата целых int и обработчик перехвата типа double. Покажите, что выполняется только обработчик catch типа double независимо от того, возвращается ли int или double. 13.32. Напишите программу на С++, предназначенную для генерации и обработки ошибки, связанной с нехваткой памяти. Ваша программа должна в цикле давать запрос на динамическое выделение памяти с помощью операции new. 13.33. Напишите программу на С++, которая показывает, что все деструкторы объектов, созданных в блоке, вызываются прежде, чем в этом блоке генерируется исключение. 13.34. Напишите программу на С++, которая показывает, что при возникновении исключения вызываются деструкторы только тех объектов-элементов, которые были созданы прежде, чем произошла генерация исключения. 13.35. Напишите программу на С++, которая показывает, что любое исключение перехватывается с помощью catch (...). 13.36. Напишите программу на С++, которая показывает, что важна последовательность обработчиков исключений. Выполняется первый соответствующий обработчик. Скомпилируйте и выполните вашу программу с двумя различными последовательностями обработчиков, чтобы показать, что при этом наблюдаются различные результаты. 13.37. Напишите программу на C-I-+, которая демонстрирует конструктор, передающий информацию о своем отказе обработчику исключения после блока try. 13.38. Напишите программу на С++, которая использует многоуровневую иерархию наследования классов исключения для создания ситуации, в которой важна последовательность обработчиков исключений. 13.39. При использовании setjump и longjump программа может сразу передать управление подпрограмме ошибки из глубоко вложенной функции. К сожалению, в этом случае при разматывания стека не вызываются деструкторы автоматических объектов, которые были созданы в течение последовательных вложенных вызовов функций. Напишите программу на С-1-+, которая показывает, что эти деструкторы действительно не вызываются. 13.40. Напишите программу на C-I-+, которая иллюстрирует повторную генерацию исключения. 13.41. Напишите программу на C-I-I-, которая использует функцию set un-expected для установки определенной пользователем функции обработки непредусмотренных исключений unexpected, затем снова использует set unexpected, а затем возвращает unexpected обратно к предыдущей функции. Напишите подобную же программу для проверки set terminate и terminate. 13.42. Напишите программу на C-I-I-, которая показывает, что функция со своим собственным блоком try не должна перехватывать каждую возможную ошибку, сгенерированную внутри try. Некоторые исключения могут быть пропущены и обработаны в других областях действия. 13.43. Напишите программу на C-I-I-, которая генерирует ошибку в глубоко вложенном обращении к функции и все таки исключение перехватывается обработчиком catch, следующим за блоком try, включающим эту цепочку вызовов. глава Обработка файлов и ввод-вывод потоков строк ▼ Цели Научиться создавать, читать, записывать и обновлять файлы. Овладеть обработкой файлов последовательного доступа. Овладеть обработкой файлов произвольного доступа. Научиться определять операции неформатированного ввода-вывода высокого уровня. Понять различие между обработкой файлов с форматированными и сырыми данными. Построить программу обработки запросов для файлов произвольного доступа. Научиться осуществлять ввод-вывод символьных строк.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |