Министерство Образования и Науки РФ
Новосибирский Государственный Технический Университет
Кафедра ПМт
ЛАБОРАТОРНАЯ РАБОТА №5 по объектно-ориентированному программированию
на тему “Шаблоны”
Факультет: ПМИ
Группа: ПМ-22
Студент: Курский Д. Н.
Преподаватель: Лисицин Д. В.
Новосибирск
2013
1.Постановка задачи
Путём модификации программ, разработанных в лабораторных работах № 3,4, разработать шаблон контейнера для хранения объектов классов, реализующих геометрические фигуры.
Преобразовать класс контейнер, разработанный в лабораторной работе № 3, в шаблон, так чтобы элементы контейнеров могли быть различные классы, разработанные в лабораторной работе № 4.
2.Описание классов
Класс Figures это абстрактный класс, содержащий чисто виртуальные функции
{
Функции класса:
virtual POINT point_search() const =0-функция поиска точки внутри фигуры;
virtual void draw(HDC hdc,HWND hwnd) const = 0-функция рисовки фигуры;
virtual void smeish (POINT enter,HDC hdc,HWND hwnd) = 0-функция перемещения фигуры по экрану;
virtual void save (std::string enter) = 0-функция обеспечивающая сохранность фигуры;
virtual void lead (std::string enter)= 0-функция обеспечивающая доступ к сохранённым данным о фигуре;
};
Класс Figure_contour потомок класса Figures-хранит фигуры без заливки
{
Атрибуты:
POINT ppt[4]-координаты вершин трапеции;
int pixel_border-размер контура трапеции;
int R_l
int G_l-цвет пера
int B_l
Функции:
bool paralell (const POINT first,const POINT second) const-функция проверки параллельности двух прямых
bool proverca (HWND hwnd) const-функция проверяющая является фигура с данными координатами трапецией;
virtual void save_f(std::ofstream& in_file)-функция запись в файл;
virtual void lead_f (std::ifstream& infile)-функция загрузки из файла;
POINT point_search() const-функция ищет точку внутри трапеции;
void Set_Pen(COLORREF rgb)-функция изменяющая цвет пера;
void Set_Border(int enter)-функция изменяющая размер пера;
COLORREF Get_Pen() const-функция- получить цвет пера;
friend std::ifstream& operator>>(std::ifstream& infile,Figure_contour &p)-ввод из файла элемент типа Figure_contour;
int Get_Border() const-функция - получить размер пера;
Figure_contour ()-конструктор;
void draw(HDC hdc,HWND hwnd) const-функция рисовки элемента класса Figure_contour;
void Set_koord (POINT ppt[])-функция меняющая координаты трапеции;
void Get_koord(POINT ppt1[]) const-функция, получения координат трапеции;
virtual void lead (std::string enter)-функция открытия файла для чтения;
virtual void save (std::string enter)-функция открытия файла для записи;
virtual void smeish (POINT enter,HDC hdc,HWND hwnd)-функция перемещающая фигуру по экрану;
};
Класс Paint-задаёт цвет заливки, а так же границу заливки
{
Атрибуты класса:
int R_Z
int G_Z-цвет до которого происходит заливка;
int B_Z
int R_B
int G_B-цвет заливки (кисти);
int B_B
Функции класса:
void Set_Brush(COLORREF rgb)-функция, изменяющая цвет заливки;
void Set_Zaliv(COLORREF rgb)-функция, изменяющая цвет до которого происходит заливка;
COLORREF Get_Brush() const-функция, получения цвета заливки;
COLORREF Get_Zaliv() const-функция, получения цвета до которого происходит заливка;
}
Класс Shaded_figure потомок класса Paintи класса Figure_contour-хранит фигуры с внутренней заливкой
{
Функции класса:
virtual void save_f(std::ofstream& in_file)- функция сохранения данных фигуры;
virtual void lead_f (std::ifstream& infile)- функция загрузки фигуры из файла;
bool ris(HDC hdc) const-функция закрашивает фигуры;
void draw(HDC hdc,HWND hwnd) const-функция рисует закрашенную фигуру;
void lead (std::string enter)- функция открытия файла для чтения;
friend std::ifstream& operator>>(std::ifstream& infile,Shaded_figure &p)-функция ввода элементов этого типа;
void save (std::string enter)-функция открытия файла для записи;
Shaded_figure()-конструктор;
void smeish (POINT enter,HDC hdc,HWND hwnd)-функция перемещающая фигуру по экрану;
};
Класс Combined_figure потомок класса Shaded_figure- реализует 2 вложенных фигуры с закраской между ними;
{
Атрибуты
Figure_contour second-внутренняя не закрашенная фигура;
Функции класса
double Square (POINT point)const-функция вычисляет площади 4 треугольников ;
bool lie ()const-функция проверки вложенности фигур;
friend std::ifstream& operator>>(std::ifstream& infile,Combined_figure &p)-функция ввода элементов этого типа;
virtual void save_f(std::ofstream& in_file)- функция сохранения данных фигуры;
virtual void lead_f (std::ifstream& infile)- функция загрузки фигуры из файла;
Combined_figure()-конструктор;
void save (std::string enter)- функция открытия файла для записи;
void lead (std::string enter)- функция открытия файла для чтения;
void smeish (POINT enter,HDC hdc,HWND hwnd)-функция перемещающая фигуру по экрану;
void draw(HDC hdc,HWND hwnd) const-функция рисует элемент данного типа;
};
Класс binary_tree – класс шаблон для хранения объектов классов, реализующих геометрические фигуры;
{
Атрибуты
struct binary_t- структура в которой хранятся элементы дерева(шаблона);
{
binary_t* right;
binary_t* left;
int key;
T elem;
};
binary_t* top-указатель на вершину дерева;
Функции класса
void del_pr(binary_t* d)- функция удаления вершин дерева поиска;
void del_put1(int key,binary_t** enter,spis_t2<T>** resoult)- функция, которая ищет элементы с заданным ключом, и помещает их в линейный список resoult;
void del_el (binary_t **elem,spis_t2<T>** enter,int key) )-функция удаления элементов бинарного дерева с заданным ключом;
void pram_ob(binary_t *elem,spis_t<T> **resoult) )- функция прямого обхода дерева, с целью получить все его элементы в линейный список resuolt;
void pram_ob_data(binary_t *elem,std::ofstream& fil) -функция прямого обхода дерева, с целью сохранить данные в дереве;
binary_tree()-конструктор класса;
void input(T& elem,int key)-добавление элементов в дерево поиска;
spis_t<T>* output(int key)-функция поиска элемента в дерево поиска с заданным ключом;
spis_t<T>* print_all()-получение всех элементов дерева;
spis_t2<T>* del_put(int key)-функция, удаляющая и возвращающая элементы с заданным ключом;
void save_data(const char* name)-функция сохранения данных дерева;
void lead_data(const char* name)-функция прочтения записанных данных;
~binary_tree()-деструктор класса;
};
}