C++   ::   Хилл Мюррей

Страница: 252 из 357

Код усложняется из-за необходимости выяснять относительное положение этих тчек:

rectangle::rectangle(point a, point b); (* if (a.x «= b.x) (* (* sw = a; ne = b; *) else (* sw = point(a.x,b.y); ne = point(b.x,a.y); *) *) else (* if (a.y «= b.y) (* sw = point(b.x,a.y); ne = point(a.x,b.y); *) else (* sw = b; ne = a; *) *) *)

Чтобы построить прямоугольник, строятся четыре его строны:

void rectangle::draw(); (* point nw(sw.x,ne.y); point se(ne.x,sw.y); put_line(nw,ne); put_line(ne,se); put_line(se,sw); put_line(sw,nw); *)

Помимо определений фигур в библиотеке фигур содержатся функции для работы с ними. Например:

void shape_refresh(); // рисует все фигуры void stack(shape* p, shape* q); // ставит p на верх q

Чтобы справиться с нашим наивным экраном, нужна обновлющая функция. Она просто рисует все фигуры заново. Обратите внимание, что она совершенно не представляет, какие фигуры рисует:

void shape_refresh() (* screen_clear(); sl_iterator next(shape_list); shape* p; while ( p=next() ) p-»draw(); screen_refresh(); *)

И вот, наконец, настоящая сервисная функция (утилита). Она кладет одну фигуру на верх другой, задавая, что south() одной должен быть сразу над north() другой:

void stack(shape* q, shape* p) // ставит p на верх q (* point n = p-»north(); point s = q-»south(); q-»move(n.x-s.x,n.y-s.y+1);

*)

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



7.6.3 Прикладная Программа

Прикладная программа чрезвычайно проста.

|< Пред. 250 251 252 253 254 След. >|

Java книги

Контакты: [email protected]