
- •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. Повторная генерация исключений
680 Глава 11
Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода.
Код местности и коммутатор не должны начинаться с 0 или 1. Проверьте первую цифру в коде местности и коммутаторе, чтобы быть уверенными, что они не начинаются ни с 0, ни с 1. Исполь зуйте функцию-элемент потока clear для установки флага ios::fail- bit в случае неправильного ввода.
Средняя цифра кода местности всегда 0 или 1. Проверьте сред нюю цифру на 0 и 1. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода. Если ни одна из приведенных выше операций не привела к установке флага ios::failbit, скопируйте три части телефонного номера в эле менты areaCode, exchange и line объекта класса PhoneNumber. В главной программе прежде чем печатать телефонный номер надо проверить, не установлен ли ios::failbit, свидетельствующий о не правильном вводе. Если установлен, то программа должна напе чатать сообщение об ошибке и не печатать номер телефона.
11.15. Напишите следующую программу:
Создайте определенный пользователем класс Point, который со держит закрытые данные-элементы xCoordinate и yCoordinate и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.
Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, яв ляются ли вводимые данные правильными, и если нет, то она долж на устанавливать индикатор неправильного ввода ios::failbit. Опе рация поместить в поток не должна выводить точку, если произошла ошибка ввода.
Напишите функцию main, которая проверяет ввод и вывод оп ределенного пользователем класса Point с помощью перегруженных операций взять из потока и поместить в поток.
11.16. Напишите следующую программу:
Создайте определенный пользователем класс Complex, который содержит закрытые данные-элементы real и imaginary и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.
Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, яв ляются ли вводимые данные правильными, и если нет, то она долж на устанавливать индикатор неправильного ввода ios::failbit. Вход ные данные должны иметь форму:
3 + 8i
Значения могут быть как положительными, так и отрицательными, и одна из двух составляющих (действительная или мнимая часть) может отсутствовать. Если часть отсутствует, то соответствующий элемент данных должен быть задан равным 0. Операция поместить в поток не должна выводить, если произошла ошибка ввода. Фор-
Потоки ввода-вывода в С++ 681
мат вывода должен быть идентичен показанному выше формату ввода. Для отрицательных мнимых частей должен быть напечатан знак минус вместо знака плюс.
с) Напишите функцию main, которая проверяет ввод и вывод определенного пользователем класса Complex с помощью перегруженных операций взять из потока и поместить в поток
Напишите программу, которая использует структуру for для печати таблицы значений ASCII для набора символов ASCII с 33 по 126. Программа должна печатать десятичное, восьмеричное, шестнад- цатеричное и символьное значения каждого символа. Используйте манипуляторы потока dec, oct и hex для печати целых значений.
Напишите программу, которая показывает, что каждая из функ ций-элементов getline и get с тремя аргументами заканчивает ввод строки конечным нулевым символом. Покажите также, что get оставляет символ ограничитель во входном потоке, а getline из влекает его из потока и отбрасывает. Что происходит с непрочи танными символами в потоке?
11.19.Напишите программу, которая создает определенный пользователем манипулятор skipwhite для пропуска лидирующих (начальных) символов разделителей во входном потоке. Манипулятор должен использовать функцию isspace из библиотеки ctype.h для проверки, не является ли символ символом разделителем. Каждый символ должен вводиться функцией-элементом get класса istream. Когда очередной символ оказывается не разделителем, манипулятор skipwhite должен заканчивать свою работу возвратом этого символа назад во входной поток и возвращением ссылки на istream.
Проверьте этот манипулятор, написав функцию main, в которой флаг ios::skipws не установлен, так что операция взять из потока автоматически не пропускает символы разделители. Затем проверьте манипулятор на входном потоке, вводя сначала символы разделители, а затем значащие символы. Печатайте вводимый символ, чтобы подтвердить, что символы разделители не вводятся.
г л а
в а
Ц e л и
Научиться использовать шаблоны функций для созда ния группы однотипных (перегруженных) функций.
Научиться различать шаблоны функций и шаблонные функции.
Научиться использовать шаблоны классов для созда ния группы связанных типов классов.
Научиться различать шаблоны класса и шаблонные классы.
Понять, как перегружать шаблонные функции.
Понять, как связаны между собой шаблоны, друзья, наследование и статические члены.