4.1 Базовый класс — Point

Предыдущая  Содержание  Следующая V*D*V

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

 

#include "Point.h"

#include "new.h"

 

int main (int argc, char ** argv) {

    void * p;

 

    while (* ++ argv) {

        switch (** argv) {

        case ’p’:

            p = new(Point, 1, 2);

            break;

        default:

            continue;

        }

        draw(p);

        move(p, 10, 20);

        draw(p);

        delete(p);

    }

    return 0;

}

 

Из каждого аргумента команды, начинающегося с буквы p, получается новая точка, которая рисуется, куда-то перемещается, отрисовывается снова и удаляется. ANSI-C не включает в себя стандартные функции для графического вывода; однако, если мы захотим нарисовать картинку, можно эмиттировать текст, который может понять программа pic Кернигана [Ker82]:

 

$ points p

"." at 1,2

"." at 11,22

 

Координаты не имеют значения для теста — перефразируя рекламу и OOspeak "the point is the message": "точка это сообщение".

Что можно делать с точкой? new() будет создавать точку, а конструктор ожидает начальные координаты в виде дополнительных аргументов new(). delete() как обычно будет утилизировать нашу точку и по соглашению мы предоставим для этого деструктор.

draw() организует отображение точки. Так как предполагается работа и с другими графическими объектами — отсюда и switch в тестовой программе — для draw() организуем динамическую компоновку.

move() изменяет координаты точки на величины, заданные в качестве аргументов. Если каждый графический объект будет отображаться относительно своей точки привязки, мы сможем перемещать его просто применив move() к этой точке. Таким образом move() должна быть в состоянии обойтись без динамической компоновки.

 

Предыдущая  Содержание  Следующая