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

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

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

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

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

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

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

«ШАБЛОНЫ»

по

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

Факультет:              прикладной математики и информатики

Группа:                    ПМ-42

Студентка:              Яндуловой О.Л.

Преподаватель:      Еланцева И. Л.

 Новосибирск

2005

1. Постановка задачи:

Путем модификации программ, разработанных в лабораторных работах № 3,4, разработать шаблон контейнера для хранения объектов классов, реализующих геометрические фигуры. Преобразовать класс-контейнер, разработанный в лабораторной работе №3, в шаблон, так чтобы элементами контейнеров могли быть различные классы, разработанные в лабораторной работе №4 (при различном инстанцировании шаблона). Разработать функцию, демонстрирующую поведение разработанного шаблона: провести инстанцирование шаблона для каждого из классов-фигур, продемонстрировать их функционирование.

Фигура: четырехугольник.

2. Алгоритм:

template <class T> class cont

private:

            list<T> *data;       содержит указатели data и last

            list<T> *last;

public:

           cont();                                  функция конструктор;

           ~cont();                                функция деструктор;

           void v_cont();                      функция положить в контейнер;

           int iz_cont(int l);                 функция взять из контейнера;

           list<T>* poisk(int k);          функция поиска элемента в контейнере;

           void pokaz(int reverse);      функция показа содержимого контейнера;

template <class T> cont<T>::cont()

{Функция конструктор, выделение памяти};

template <class T>cont<T>::~cont()

{функция деструктор, освобождение памяти};

template <class T> void cont<T>::v_cont()

{Функция положить в контейнер элемент. Элементом является четырехугольник};

template <class T> int cont<T>::iz_cont(int l)

{Функция взять из контейнера элемент. Элементом является четырехугольник};

template <class T> list<T>  *cont<T>::poisk(int k)

{функция поиска элемента в контейнере. Элементом является четырехугольник. Поиск осуществляется по графическим параметрам};

template <class T> void cont<T>::pokaz(int rv)

{функция показа содержимого контейнера как в прямом, так и в обратном порядке};

3. Текст разработанной программы:

Класс:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <graphics.h>

class figyra

{    protected:     int a[8];

    public: void get_geom(int *x1,int *y1,int *x2,int *y2,int *x3,int *y3,int *x4,int *y4);

                 void set_geom(int b[]);

                 virtual void zakras()=0;

                 void in1();

};

class figyra_kontyr:public figyra

{    protected:    int thickness;

                           int linestyle;

                           int color_kont;

    public:       int get_thickness();

                       int get_linestyle();

                       int get_color_kont();

                        void set_thickness(int thickness1);

                       void set_linestyle(int linestyle1);

                       void set_color_kont(int color_kont1);

                       virtual void zakras();

                       void in1();

                      void in2();

                     int comp2(figyra_kontyr *c);

};

class zakrawennui

{ protected:     int color;

    public:    int get_color();

                   void set_color(int c);

};

class zakrawennaja_figyra:

      public figyra_kontyr,

      public zakrawennui

{ public:   void zakras();

                 void in1();

                 void in2();

                 int comp2(zakrawennaja_figyra *c);

};

class kombinirovannaja_figyra:

      public zakrawennaja_figyra

{    protected:         zakrawennaja_figyra f,g;

    public:       void zakras();

                      void in1();

                      void in2();

                      int comp2(kombinirovannaja_figyra *c);

};

void figyra::get_geom(int *x1,int *y1,int *x2,int *y2,int *x3,int *y3,int *x4,int *y4)

{   *x1=a[0];

    *y1=a[1];

    *x2=a[2];

    *y2=a[3];

    *x3=a[4];

    *y3=a[5];

    *x4=a[6];

    *y4=a[7];}

void figyra::set_geom(int b[])

{   int i;

    for(i=0;i<8;i++)

    a[i]=b[i];}

void figyra::in1()

{   int a[8];

    int i,t;

    for(i=0,t=1;i<8;i=i+2,t++)

       {   printf("x%d=",t);

            scanf("%d",&a[i]);

            printf("y%d=",t);

            scanf("%d",&a[i+1]);   } 

  set_geom(a);

        if(a[0]>639||a[1]>479||a[2]>639||a[3]>479||a[4]>639||a[5]>479||a[6]>639||a[7]>479)

          { puts("chetirehugolnik ne vhodit v ekran");

            getche();

             exit(8);   }}

int figyra_kontyr::get_thickness()

{return thickness;}

int figyra_kontyr::get_linestyle()

{return linestyle;}

int figyra_kontyr::get_color_kont()

{return color_kont;}

void figyra_kontyr::set_thickness(int thickness1)

{thickness=thickness1;}

void figyra_kontyr::set_linestyle(int linestyle1)

{linestyle=linestyle1;}

void figyra_kontyr::set_color_kont(int color_kont1)

{color_kont=color_kont1;}

void figyra_kontyr::zakras()

{  int b[8];

    setcolor(color_kont);

    setlinestyle(linestyle,0,thickness);

    setfillstyle(EMPTY_FILL,getbkcolor());

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

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