Разработка шаблона контейнера для хранения объектов классов, реализующих геометрические фигуры (окружности) (Лабораторная работа № 5)

Страницы работы

Фрагмент текста работы

Министерство образования и науки  Российской Федерации

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра прикладной математики

ЛАБОРОТОРНАЯ  РАБОТА №5

«ШАБЛОНЫ»

по

“Объектно-ориентированному программированию”

Факультет: ПМИ

Группа: ПМИ-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;};

Похожие материалы

Информация о работе