Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++book1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.83 Mб
Скачать

7.8 Упражнения

1. (*1) Определите

class base (*

public:

virtual void iam() (* cout << "base\n"; *)

*);

Выведите из base два класса и для каждого определите iam () ("я есть"), которая выводит имя класса на печать. Создайте объекты этих классов и вызовите для них iam(). Присвойте адреса объектов производных классов указателям base* и вызовите iam() через эти указатели.

2. (*2) Реализуйте примитивы экрана (#7.6.1) подходящим для вашей системы образом.

3. (*2) Определите класс triangle (треугольник) и класс circle (круг).

4. (*2) Определите функцию, которая рисует линию, соединяю­щую две фигуры, отыскивая две ближайшие "точки соприкос­новения" и соединяя их.

5. (*2) Модифицируйте пример с фигурами так, чтобы line бы­ла rectangle и наоборот.

6. (*2) Придумайте и реализуйте дважды связанный список, который можно использовать без итератора.

7. (*2) Придумайте и реализуйте дважды связанный список, которым можно пользоваться только посредством итератора. Итератор должен иметь действия для движения вперед и на­зад, действия для вставления и удаления элементов спис­ка, и способ доступа к текущему элементу.

8. (*2) Постройте обобщенный вариант дважды связанного списка.

9. (*4) Сделайте список, в котором вставляются и удаляются сами объекты (а не просто указатели на объекты). Проде­лайте это для класса X, для которого определены X::X(X&), X::~X() X::operator=(X&).

10.(*5) Придумайте и реализуйте библиотеку для написания моделей, управляемых прерываниями. Подсказка: <task.h>. Только это - старая программа, а вы могли бы написать лучше. Должен быть класс task - задача. Объект класса task должен мочь сохранять свое состояние и восстанавли­ваться в это состояние (вы можете определить task::save() и task::restore()), чтобы он мог действо­вать как сопрограмма. Отдельные задачи можно определять как объекты классов, производных от класса task. Прог­рамма, которую должна исполнять задача, может задаваться как виртуальная функция. Должна быть возможность переда­вать новой задаче ее параметры как параметры ее конс­труктора(ов). Там должен быть планировщик, реализующий концепцию виртуального времени. Обеспечьте функцию за­держки task::delay(), которая "тратит" виртуальное вре­мя. Будет ли планировщик отдельным или частью класса task - это один из основных вопросов, которые надо ре­шить при проектировании. Задача должна передавать дан­ные. Для этого разработайте класс queue (очередь). При­думайте способ, чтобы задача ожидала ввода из нескольких очередей. Ошибки в ходе выполнения обрабатывайте одно­родным образом. Как бы вы отлаживали программы, написан­ные с помощью такой библиотеки?

Глава 8 Потоки

``bad input char: .Ppm(*=P!..*@Z9A*)5!!!!!"syui!!!"!Mp#V6P?p8`;!4lf&

- сообщение об ошибке (сокращенное)

Язык С++ не обеспечивает средств для ввода/вывода. Ему это и не нужно. Такие средства легко и элегантно можно соз­дать с помощью самого языка. Описанная здесь стандартная биб­лиотека потокового ввода/вывода обеспечивает гибкий и эффек­тивный, с гарантией типа, метод обработки символьного ввода целых чисел, чисел с плавающей точкой и символьных строк, а также простую модель ее расширения для обработки типов, опре­деляемых пользователем. Ее пользовательский интерфейс нахо­дится в <stream.h>. В этой главе описывается сама библиотека, некоторые способы ее применения и методы, которые использова­лись при ее реализации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]