Министерство образования и науки Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра прикладной математики
«ШАБЛОНЫ»
по
“Объектно-ориентированному программированию”
Факультет: ПМИ
Группа: ПМИ-61
Студент: Снегирева А.А.
Преподаватель: Еланцева И.Л.
Новосибирск
2008
1. Постановка задачи:
Путем модификации программ, разработанных в лабораторных работах № 3,4, разработать шаблон контейнера для хранения объектов классов, реализующих геометрические фигуры. Преобразовать класс-контейнер, разработанный в лабораторной работе №3, в шаблон, так чтобы элементами контейнеров могли быть различные классы, разработанные в лабораторной работе №4 (при различном инстанцировании шаблона). Разработать функцию, демонстрирующую поведение разработанного шаблона: провести инстанцирование шаблона для каждого из классов-фигур, продемонстрировать их функционирование.
Фигура: окружность.
2. Алгоритм:
template <class T> class container
private:
list<T> *head; содержит указатели data и last
list<T> *work;
public:
container(); функция конструктор;
~container(); функция деструктор;
void add_elem(); функция положить в контейнер;
void search_elem(); функция поиска элемента в контейнере;
void print(); функция показа содержимого контейнера;
template <class T> container<T>::container()
{Функция конструктор, выделение памяти};
template <class T>container<T>::~container()
{функция деструктор, освобождение памяти};
template <class T> void container<T>::add_elem()
{Функция положить в контейнер элемент. Элементом является окружность};
template <class T> void container<T>::search()
{функция поиска элемента в контейнере. Элементом является окружность. Поиск осуществляется по геометрическим параметрам};
template <class T> void container<T>::print()
{функция показа содержимого контейнера как в прямом, так и в обратном порядке};
3. Текст разработанной программы:
Класс:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
int color,style,i;
class basic_circle
{protected:int width;
int linecolor;
int x;
int y;
int R;
public:
int get_x(){return x;};
int get_y(){return y;};
int get_R(){return R;};
virtual void paint() const = 0;
virtual int check_up() const =0;
};
/**************************************************************/
/**************************************************************/
class basic_flooding
{protected:
int floodcolor;
int floodstyle;
public:
void flooding(int,int,int);
void take_flooding_parametrs();
int check_flooding_parametrs(int,int);
};
/******************************************************************/
/******************************************************************/
void basic_flooding::flooding(int x,int y,int linecolor)
{setfillstyle(floodstyle,floodcolor);
floodfill(x,y,linecolor);
};
/******************************************************************/
int basic_flooding::check_flooding_parametrs(int color,int style)
{if(color>=0)if(color<=15)if(style>=0)if(style<=11)return 1;
else return 0;
else return 0;
else return 0;
else return 0;
};
/******************************************************************/
void basic_flooding::take_flooding_parametrs()
{printf("\n Enter style and color of flooding.\n");
scanf("%d%d",&style,&color);
i=check_flooding_parametrs(color,style);
if(i==1){floodcolor=color;
floodstyle=style;
printf("\n Flooding parametrs were scaned.\n");}
else{printf("\n Wrong parametrs!.\n");
take_flooding_parametrs();}
};
/*******************************************************************/
/*******************************************************************/
int maxx,maxy;
int a,b,r,l,w;
class painting_circle:public basic_circle
{public:
void take_graphical_parametrs();
void paint();
void movement();
int check_up(int,int,int);
void take_coordinates();
void take_width_linecolor();
int check_width_linecolor(int,int);
};
/*****************************************************************/
void painting_circle::take_graphical_parametrs()
{take_width_linecolor();
}
/*****************************************************************/
void painting_circle::paint()
{setcolor(linecolor);
setlinestyle(0,0,width);
circle(x,y,R);
}
/*****************************************************************/
void painting_circle::movement()
{clrscr();
int z=20;
while(z!='5')
{clrscr();
paint();
outtextxy(5,5,"Use Num(1,2,3,4,6,7,8,9) to move the figure. 5-Exit.");
z=getch();
if(z=='1') {x=x-2;
y=y+2;};
if(z=='2') {y=y+2;
x=x;};
if(z=='3') {x=x+2;
y=y+2;};
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.