Страница:
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 След. >|