Статья: Законченная программа
class line : public shape {
/*
линия из "w" в "e"
north() определяется как ``выше центра
и на север как до самой северной точки""
*/
point w,e;
public:
point north()
{ return point((w.x+e.x)/2,e.ydraw();
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);
}
Теперь представим себе, что эта библиотека считается собственностью некоей компании, которая продает программное обеспечение, и что они продают вам только заголовочный файл, содержащий определения фигур, и откомпилированный вариант определений функций. И у вас все равно остается возможность определять новые фигуры и использовать для ваших собственных фигур сервисные функции.
Прикладная Программа
Прикладная программа чрезвычайно проста. Определяется новая фигура my_shape (на печати она немного похожа на рожицу), а потом пишется главная программа, которая надевает на нее шляпу. Вначалеописание my_shape:
#include "shape.h"
class myshape : public rectangle {
line* l_eye; // левыйглаз
line* r_eye; // правыйглаз
line* mouth; // рот
public:
myshape(point, point);
void draw();