Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ООП_заочники.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
321.02 Кб
Скачать

Лабораторная работа №5

Создание иерарахии классов.

1.Дополнительно к классу лабораторной работы №3 разработать класс аналогичной фигуры, у которой дополнительно меняется стиль или цвет линии или заполнения( в зависимости от изменяемого параметра из этого списка в первоначальной задаче).

2.Дополнительно к классу лабораторной работы №3 разработать базовый класс «точка» и производные от него классы – ваша фигура и следующая по номеру варианта. Двигаться и менять свои параметры фигуры должны в соответствии с вашим заданием. Набор фигур задать в виде связного списка.

Пример.

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

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>

#include <dos.h>

#include <conio.h>

#include <iostream.h>

class pn{//class pointer

pn *next;

protected:

int v,x,y,color;

public:

pn(pn *nx)

{

cout<<"vvedite nach koord,cvet i skor";

cin>>x>>y>>color>>v;

next=nx;

}

pn* getnext(){return next;}

void move()

{

x+=v;

if(proverka())

{color++; v=-v;

if(color>15)

color=1;

}

}

virtual int proverka()

{

if(x>639) {x=639; return 1;}

if(x<0){x=0; return 1;}

return 0;

}

virtual void draw()

{

putpixel(x,y,color);

}

};

class figura:public pn

{

public:

figura(pn *nx):pn(nx)

{ }

virtual int proverka()

{

if(x+70>639) {x=639-70; return 1;}

if(x<0){x=0; return 1;}

return 0;

}

virtual void draw()

{

setcolor(color);

moveto(x,y); //в®зЄ  1

lineto(x+20,y-10);//в®зЄ  2

lineto(x+50,y-10);//в®зЄ  3

lineto(x+70,y);//в®зЄ  4

lineto(x+50,y+10);//в®зЄ  5

lineto(x+20,y+10);//в®зЄ  6

lineto(x,y);//в®зЄ  1

}

};

class prmug:public pn

{ int dx,dy;

public:

prmug(pn *nx):pn(nx)

{ cout<<"Input dlinu i shirinu";

cin>>dx>>dy;

}

virtual int proverka()

{

if(x+dx>639) {x=639-dx; return 1;}

if(x<0){x=0; return 1;}

return 0;

}

virtual void draw()

{

setcolor(color);

rectangle(x,y,x+dx,y+dy);

}

};

void main()

{

pn *top=NULL;

char c;

do

{

cout<<"ESC-konec nabora 1-tochka, 2-figura, 3-prmug";

c=getch();

switch(c)

{

case '1':cout<<"Zadaite tochku:";

top=new pn(top); break;

case '2':cout<<"Zadaite figuru:";

top=new figura(top); break;

case '3':cout<<"Zadaite prmug:";

top=new prmug(top); break;

}

}while(c!=27);

int GD=DETECT, GM;

initgraph(&GD,&GM,"");

struct time tm1,tm2;

gettime(&tm1);

for(;;)

{

pn *temp=top;

cleardevice();

while(temp)

{

temp->draw();

temp=temp->getnext();

}

do

{

if(kbhit()) if(getch()==27)

{

closegraph();

while(top)

{

temp=top->getnext();

delete top;

top=temp;

}

return;

}

gettime(&tm2);

}while(tm1.ti_sec==tm2.ti_sec);

tm1=tm2;

temp=top;

while(temp)

{

temp->move();

temp=temp->getnext();

}

}

}//end