Скачиваний:
46
Добавлен:
15.09.2014
Размер:
877.06 Кб
Скачать

680 Глава 11

Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода.

  1. Код местности и коммутатор не должны начинаться с 0 или 1. Проверьте первую цифру в коде местности и коммутаторе, чтобы быть уверенными, что они не начинаются ни с 0, ни с 1. Исполь­ зуйте функцию-элемент потока clear для установки флага ios::fail- bit в случае неправильного ввода.

  2. Средняя цифра кода местности всегда 0 или 1. Проверьте сред­ нюю цифру на 0 и 1. Используйте функцию-элемент потока clear для установки флага ios::failbit в случае неправильного ввода. Если ни одна из приведенных выше операций не привела к установке флага ios::failbit, скопируйте три части телефонного номера в эле­ менты areaCode, exchange и line объекта класса PhoneNumber. В главной программе прежде чем печатать телефонный номер надо проверить, не установлен ли ios::failbit, свидетельствующий о не­ правильном вводе. Если установлен, то программа должна напе­ чатать сообщение об ошибке и не печатать номер телефона.

11.15. Напишите следующую программу:

  1. Создайте определенный пользователем класс Point, который со­ держит закрытые данные-элементы xCoordinate и yCoordinate и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.

  2. Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, яв­ ляются ли вводимые данные правильными, и если нет, то она долж­ на устанавливать индикатор неправильного ввода ios::failbit. Опе­ рация поместить в поток не должна выводить точку, если произошла ошибка ввода.

  3. Напишите функцию main, которая проверяет ввод и вывод оп­ ределенного пользователем класса Point с помощью перегруженных операций взять из потока и поместить в поток.

11.16. Напишите следующую программу:

  1. Создайте определенный пользователем класс Complex, который содержит закрытые данные-элементы real и imaginary и объявляет перегруженные функции-операции взять из потока и поместить в поток как дружественные функции класса.

  2. Опишите функции-операции взять из потока и поместить в поток. Функция-операция взять из потока должна определять, яв­ ляются ли вводимые данные правильными, и если нет, то она долж­ на устанавливать индикатор неправильного ввода ios::failbit. Вход­ ные данные должны иметь форму:

3 + 8i

Значения могут быть как положительными, так и отрицательными, и одна из двух составляющих (действительная или мнимая часть) может отсутствовать. Если часть отсутствует, то соответствующий элемент данных должен быть задан равным 0. Операция поместить в поток не должна выводить, если произошла ошибка ввода. Фор-

Потоки ввода-вывода в С++ 681

мат вывода должен быть идентичен показанному выше формату ввода. Для отрицательных мнимых частей должен быть напечатан знак минус вместо знака плюс.

с) Напишите функцию main, которая проверяет ввод и вывод оп­ределенного пользователем класса Complex с помощью перегружен­ных операций взять из потока и поместить в поток

  1. Напишите программу, которая использует структуру for для печати таблицы значений ASCII для набора символов ASCII с 33 по 126. Программа должна печатать десятичное, восьмеричное, шестнад- цатеричное и символьное значения каждого символа. Используйте манипуляторы потока dec, oct и hex для печати целых значений.

  2. Напишите программу, которая показывает, что каждая из функ­ ций-элементов getline и get с тремя аргументами заканчивает ввод строки конечным нулевым символом. Покажите также, что get оставляет символ ограничитель во входном потоке, а getline из­ влекает его из потока и отбрасывает. Что происходит с непрочи­ танными символами в потоке?

11.19.Напишите программу, которая создает определенный пользовате­лем манипулятор skipwhite для пропуска лидирующих (начальных) символов разделителей во входном потоке. Манипулятор должен использовать функцию isspace из библиотеки ctype.h для проверки, не является ли символ символом разделителем. Каждый символ должен вводиться функцией-элементом get класса istream. Когда очередной символ оказывается не разделителем, манипулятор skip­white должен заканчивать свою работу возвратом этого символа назад во входной поток и возвращением ссылки на istream.

Проверьте этот манипулятор, написав функцию main, в которой флаг ios::skipws не установлен, так что операция взять из потока автоматически не пропускает символы разделители. Затем проверь­те манипулятор на входном потоке, вводя сначала символы раз­делители, а затем значащие символы. Печатайте вводимый символ, чтобы подтвердить, что символы разделители не вводятся.

г л а в а

Шаблоны

Ц e л и

  • Научиться использовать шаблоны функций для созда­ ния группы однотипных (перегруженных) функций.

  • Научиться различать шаблоны функций и шаблонные функции.

  • Научиться использовать шаблоны классов для созда­ ния группы связанных типов классов.

  • Научиться различать шаблоны класса и шаблонные классы.

  • Понять, как перегружать шаблонные функции.

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