
- •Проектування програмних засобів. Загальні відомості.
- •Лабораторна робота № 1 Робота з потоками.
- •Лабораторная работа n2.
- •Лабораторная работа n3.
- •Лабораторная работа №4 Разработка объектно-ориентированных программ. Взаємодія класів. Порядок выполнения работы (по занаятиям).
- •Требования к программе
- •Лабораторная работа №5
- •Перелік літератури
Лабораторная работа №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