Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Cpp_Страуструп.doc
Скачиваний:
16
Добавлен:
03.05.2015
Размер:
3.2 Mб
Скачать

10.7 Упражнения

1. (*1.5) Читая файл вещественных чисел, составлять из пар прочитанных

чисел комплексные числа, записать комплексные числа.

2. (*1.5) Определить тип name_and_address (тип_и_адрес). Определить для

него << и >>. Написать программу копирования объектов потока

name_and_address.

3. (*2) Разработать несколько функций для запроса и чтения данных

разных типов. Предложения: целое, вещественное число, имя файла,

почтовый адрес, дата, личная информация, и т.п. Попытайтесь сделать

их устойчивыми к ошибкам.

4. (*1.5) Напишите программу, которая печатает: (1) строчные буквы,

(2) все буквы, (3) все буквы и цифры, (4) все символы, входящие в

идентификатор в вашей версии С++, (5) все знаки пунктуации,

(6) целые значения всех управляющих символов, (7) все обобщенные

пробелы, (8) целые значения всех обобщенных пробелов, и, наконец,

(9) все изображаемые символы.

5. (*4) Реализуйте стандартную библиотеку ввода-вывода С (<stdio.h>)

с помощью стандартной библиотеки ввода-вывода С++ (<iostream.h>).

6. (*4) Реализуйте стандартную библиотеку ввода-вывода С++

(<iostream.h>) с помощью стандартной библиотеки ввода-вывода С

(<stdio.h>).

7. (*4) Реализуйте библиотеки С и С++ так, чтобы их можно было

использовать одновременно.

8. (*2) Реализуйте класс, для которого операция [] перегружена так,

чтобы обеспечить произвольное чтение символов из файла.

9. (*3) Повторите упражнение 8, но добейтесь, чтобы операция [] была

применима для чтения и для записи. Подсказка: пусть [] возвращает

объект "дескриптор типа", для которого присваивание означает:

присвоить через дескриптор файлу, а неявное приведение к типу char

означает чтение файла по дескриптору.

10.(*2) Повторите упражнение 9, позволяя операции [] индексировать

объекты произвольных типов, а не только символы.

11.(*3.5) Продумайте и реализуйте операцию форматного ввода.

Используйте для задания формата строку спецификаций как в printf().

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

одного ввода, чтобы найти требуемый формат. Класс форматного ввода

должен быть производным класса istream.

12.(*4) Придумайте (и реализуйте) лучшие форматы ввода.

13.(**2) Определите для вывода манипулятор based с двумя параметрами:

система счисления и целое значение, и печатайте целое в

представлении, определяемом системой счисления. Например, based(2,9)

напечатает 1001.

14.(**2) Напишите "миниатюрную" систему ввода-вывода, которая реализует

классы istream, ostream, ifstream, ofstream и предоставляет функции,

такие как operator<<() и operator>>() для целых, и операции, такие

как open() и close() для файлов. Используйте исключительные

ситуации, а не переменные состояния, для сообщения об ошибках.

15.(**2) Напишите манипулятор, который включает и отключает эхо

символа.

* Проектирование и развитие

"Серебряной пули не существует."

- Ф. Брукс

В этой главе обсуждаются подходы к разработке программного обеспечения.

Обсуждение затрагивает как технические, так и социологические аспекты

процесса развития программного обеспечения. Программа рассматривается

как модель реальности, в которой каждый класс представляет определенное

понятие. Ключевая задача проектирования состоит в определении доступной

и защищенной частей интерфейса класса, исходя из которых определяются

различные части программы. Определение этих интерфейсов есть

итеративный процесс, обычно требующий экспериментирования. Упор

делается на важной роли проектирования и организационных факторов

в процессе развития программного обеспечения.