Язык программирования C++ для профессионалов


Библиотека фигур


Начнем с определения общего понятия фигуры. Определение должно быть таким, чтобы им можно было воспользоваться (как базовым классом shape) в разных классах, представляющих все конкретные фигуры (окружности, квадраты и т.д.). Оно также должно позволять работать со всякой фигурой исключительно с помощью интерфейса, определяемого классом shape:

struct shape { static shape* list; shape* next;

shape() { next = list; list = this; }

virtual point north() const = 0; virtual point south() const = 0; virtual point east() const = 0; virtual point west() const = 0; virtual point neast() const = 0; virtual point seast() const = 0; virtual point nwest() const = 0; virtual point swest() const = 0;

virtual void draw() = 0; virtual void move(int, int) = 0; };

Фигуры помещаются на экран функцией draw(), а движутся по нему с помощью move(). Фигуры можно помещать относительно друг друга, используя понятие точек контакта. Для обозначения точек контакта используются названия сторон света в компасе: north - север, ... , neast - северо-восток, ... , swest - юго-запад. Класс каждой конкретной фигуры сам определяет смысл этих точек и определяет, как рисовать фигуру. Конструктор shape::shape() добавляет фигуру к списку фигур shape::list. Для построения этого списка используется член next, входящий в каждый объект shape. Поскольку нет смысла в объектах типа общей фигуры, класс shape определен как абстрактный класс.

Для задания отрезка прямой нужно указать две точки или точку и целое. В последнем случае отрезок будет горизонтальным, а целое задает его длину. Знак целого показывает, где должна находиться заданная точка относительно конечной точки, т.е. слева или справа от нее:

class line : public shape { /* отрезок прямой ["w", "e" ] north() определяет точку - `` выше центра отрезка и так далеко на север, как самая его северная точка'' */ point w, e; public: point north() const { return point((w.x+e.x)/2,e.y<w.y?w.y:e:y); } point south() const { return point((w.x+e.x)/2,e.y<w.y?e.y:w.y); } point east() const; point west() const; point neast() const; point seast() const; point nwest() const; point swest() const;




- Начало -  - Назад -  - Вперед -



Книжный магазин