Программирование >>  Структурное программирование 

1 ... 243 244 245 [ 246 ] 247 248 249 ... 342


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, включающим эту цепочку вызовов.



глава


Обработка файлов и ввод-вывод потоков строк

Цели

Научиться создавать, читать, записывать и обновлять файлы.

Овладеть обработкой файлов последовательного доступа.

Овладеть обработкой файлов произвольного доступа.

Научиться определять операции неформатированного ввода-вывода высокого уровня.

Понять различие между обработкой файлов с форматированными и сырыми данными.

Построить программу обработки запросов для файлов произвольного доступа.

Научиться осуществлять ввод-вывод символьных строк.



1 ... 243 244 245 [ 246 ] 247 248 249 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика