
- •618 Глава 10
- •620 Глава 10
- •Глава 10
- •624 Глава 10
- •626 Глава 10
- •630 Глава 11 План
- •11.3. Вывод потоков
- •11.4. Ввод потоков
- •11.7. Состояния формата потоков
- •11.10. Связывание выходного потока с входным
- •11.1. Введение
- •632 Глава 11
- •11.2. Потоки
- •11.2.1. Заголовочные файлы библиотеки iostream
- •11.2.2. Классы и объекты потоков ввода-вывода
- •634 Глава 11
- •11.3. Вывод потоков
- •11.3.1. Операция поместить в поток
- •636 _ Глава 11
- •47 Плюс 53 равняется 100
- •11.3.2. Сцепление операций поместить в поток и взять из потока
- •47 Плюс 53 равняется 100
- •638 _ Глава 11
- •11.3.3. Вывод переменных типа char *
- •11.3.4. Вывод символов с помощью функции-элемента put; сцепленные выводы
- •11.4. Ввод потоков
- •11.4.1. Операция взять из потока
- •640 _ Глава 11
- •7 Не равно 5
- •8 Равно 8
- •11.4.2. Функции-элементы get и getline
- •642 Глава 11
- •644 Глава 11
- •11.4.3. Другие функции-элементы класса istream (peek, putback, ignore)
- •11.4.4. Сохранение типов данных при вводе-выводе
- •11.5. Неформатированный ввод-вывод с использованием read, gcount и write
- •11.6. Манипуляторы потоков
- •646 _ Глава 11
- •11.6.1. Манипуляторы потоков dec, oct, hex и setbase, задающие основание чисел
- •11.6.2. Точность чисел с плавающей запятой (precision,
- •11.6.3. Ширина поля (setw, width)
- •648 Глава 11
- •650 Глава 11
- •11.6.4. Манипуляторы, определяемые пользователем
- •11.7. Состояния формата потоков
- •11.7.1. Флаги состояний формата
- •Глава 11
- •11.7.2. Нулевые младшие разряды и десятичные точки
- •11.7.3. Выравнивание (ios::left, ios::right, ios::internal)
- •654 Глава 11
- •11.7.4. Заполнение (fill, setfill)
- •10000 Напечатанное как целое с выравниванием right и left и как шестнадцатеричное с выравниванием internal Использование заполняющего символа по умолчанию (пробела)
- •656 Глава 11
- •11.7.5. Основание системы счисления (ios::dec, ios::oct, ios::hex,
- •11.7.6. Числа с плавающей запятой; экспоненциальный формат (ios::scientific, ios::fixed)
- •658 Глава 11
- •11.7.7. Управление выводом в нижнем и верхнем регистрах
- •11.7.8. Установка и сброс флагов формата (flags, setiosflags
- •11.8. Состояния ошибок потока
- •11.9. Ввод-вывод определенных пользователем типов данных
- •Глава 11
- •После cin.Clear():
- •664 Глава 11
- •11.10. Связывание выходного потока с входным
- •Глава 11
- •Глава 11
- •670 Глава 11
- •672 Глава 11
- •674 Глава 11
- •676 Глава 11
- •1) Неверно. Поток cin связан со стандартным устройством ввода компьютера, обычно с клавиатурой.
- •0) Верно.
- •678 Глава 11
- •680 Глава 11
- •684 Глава 12
- •12.2. Шаблоны функций
- •686 Глава 12
- •Глава 12
- •12.3. Перегрузка шаблонных функций
- •12.4. Шаблоны классов
- •Глава 12
- •692 Глава 12
- •694 Глава 12
- •12.5. Шаблоны классов и нетиповые параметры
- •12.6. Шаблоны и наследование
- •12.7. Шаблоны и друзья
- •696 Глава 12
- •12.8. Шаблоны и статические элементы
- •Глава 12
- •700 Глава 12
- •702 Глава 12
- •704 Глава 13 План
- •13.1. Введение
- •706 Глава 13
- •708 Глава 13
- •13.2. Когда должна использоваться обработка исключений
- •13.3. Другие методы обработки ошибок
- •710 Глава 13
- •13.5. Простой пример обработки исключений: деление на нуль
- •712 Глава 13
- •13.6. Блоки try
- •13.7. Генерация исключений
- •714 Глава 13
- •13.8. Перехват исключений
- •716 Глава 13
- •718 Глава 13
- •13.9. Повторная генерация исключений
13.6. Блоки try
Исключения, которые генерируется в блоке try, обычно перехватываются обработчиком, описанным в блоке catch, следующем непосредственно за этим блоком try.
try {
}
catch ( ) {
За блоком try может не следовать ни одного блока catch, или может следовать несколько таких блоков. Если при выполнении блока try не генерируется ни одно исключение, все обработчики исключений пропускаются и управление передается первому оператору после последнего обработчика.
13.7. Генерация исключений
Ключевое слово throw используется для того, чтобы указать, какое исключение генерируется. Это называется генерацией исключения или возбуждением исключения. Обычно throw имеет один операнд (специальный случай без операндов мы обсудим отдельно). Операнд throw может быть любого типа. Если операнд является объектом, мы называем его объектом исключения. Вместо объекта может быть сгенерировано условное выражение (см. раздел 13.10). Можно также генерировать объекты, не предназначенные для обработки ошибок.
Где перехватывается исключение? После генерации исключение будет перехвачено ближайшим обработчиком исключений (ближайшим к блоку try, в котором было сгенерировано исключение), содержащим спецификацию соответствующего типа. Обработчики исключений для блока try перечисляются сразу после него.
В процессе генерации исключения создается и инициализируется временная копия операнда throw. Этот временный объект затем инициализирует параметр в обработчике исключения. Временный объект уничтожается, когда завершается выполнение обработчика исключения и управление передается программе.
Замечание по технике программирования 13.5
Если необходимо передать информацию относительно ошибки, которая вызвала исключение, то такая информация может быть помещена в сгенерированный объект. Обработчик catch должен содержать в этом случае имя параметра, через который эта информация может быть принята.
Замечание по технике программирования 13.6
Может быть сгенерирован объект, не содержащий информацию для передачи; в этом случае обработчику достаточно простой информации о том, что сгенерировано исключение данного типа, чтобы правильно выполнить свою задачу.
714 Глава 13
Когда исключение сгенерировано, программное управление покидает текущий блок try и передается соответствующему обработчику catch (если он существует), расположенному после этого блока try. Возможно, что точка генерации расположена в глубоко вложенной области действия внутри блока try; управление все равно будет передано этому обработчику catch. Возможно также, что точка генерации расположена в глубоко вложенных вызовах функций; и в этом случае управление будет передано этому обработчику catch.
Может оказаться, что сам блок try не содержит никаких проверок ошибок и не включает никаких операторов throw, но код, вызываемый из блока try, может, конечно, содержать контроль ошибок, в частности, в конструкторах. Например, код в блоке try может обрабатывать индексирование массива в объекте класса массив, в котором функция-элемент operator[] может быть перегружена генерацией исключения, связанного с ошибкой выхода индекса за допустимые пределы. Любое обращение к этой функции может сгенерировать исключение или вызвать другую функцию, которая тоже может сгенерировать исключение.
Исключение может прервать выполнение программы, но это не обязательно. Однако, выполнение блока, в котором сгенерировано исключение, завершается.
Типичная ошибка программирования 13.3
Исключение должно генерироваться только внутри блока try. Исключение сгенерированное вне блока try, вызывает обращение к terminate ^ прерыванию программы.