7.6.3 Прикладная Программа
7.6.3 Прикладная Программа
Прикладная программа чрезвычайно проста. Определяется новая фигура myshape (на печати она немного похожа на рожцу), а потом пишется главная программа, которая надевает на нее шляпу. Вначале описание myshape:
#include «shape.h»
class myshape : public rectangle (* line* l_eye; // левый глаз line* r_eye; // правый глаз line* mouth; // рот public: myshape(point, point); void draw(); void move(int, int); *);
Глаза и рот – отдельные и независимые объекты, которые создает конструктор myshape:
myshape::myshape(point a, point b) : (a,b) (* int ll = neast().x-swest().x+1; int hh = neast().y-swest().y+1; l_eye = new line( point(swest().x+2,swest().y+hh*3/4),2); r_eye = new line( point(swest().x+ll-4,swest().y+hh*3/4),2); mouth = new line( point(swest().x+2,swest().y+hh/4),ll-4); *)
Объекты глаза и рот порознь рисуются заново функцией shape_refresh(), и в принципе могут обрабатываться независимо из объекта myshape, которому они принадлежат. Это один способ определять средства для иерархически построенных объектов вроде myshape. Другой способ демонстрируется на примере носа. Никакой нос не определяется, его просто добавляет к картинке функция draw():
void myshape::draw() (* rectangle::draw(); put_point(point( (swest().x+neast().x)/2,(swest().y+neast().y)/2)); *)
myshape передвигается посредством перемещения базового прямоугольника rectangle и вторичных объектов l_eye, r_eye и mouth (левого глаза, правого глаза и рта):
void myshape::move() (* rectangle::move(); l_eye-»move(a,b);
r_eye-»move(a,b); mouth-»move(a,b); *)
Мы можем, наконец, построить несколько фигур и немного их подвигать:
main() (* shape* p1 = new rectangle(point(0,0),point(10,10)); shape* p2 = new line(point(0,15),17); shape* p3 = new myshape(point(15,10),point(27,18)); shape_refresh(); p3-»move(-10,-10); stack(p2,p3); stack(p1,p2); shape_refresh(); return 0; *)
Еще раз обратите внимание, как функции вроде shape_refresh() и stack() манипулируют объектами типов, опрделяемых гораздо позже, чем были написаны (и, может быть, окомпилированы) сами эти функции.
*********** * * * * * * * * * * * * * * * * * * *********** ***************** ************* * * * ** ** * * * * * * * * * ********* * * * *************