Министерство образования и науки Российской Федерации
ГОУ ВПО
НГТУ
Лабораторная работа №4
Отношения между классами: агрегация, обобщение, зависимость
Факультет: ПМИ
Группа: ПМ-55
Студент: Быданов А.А.
Преподаватель: Еланцева И.Л
Дата сдачи:
Новосибирск 2006г.
1. Постановка задачи
Разработать программу, такую чтобы в ней были определены несколько классов, реализующих понятие геометрической фигуры в графической системе:
– абстрактный класс «Фигура», содержащий чисто виртуальные функции;
– класс «Закрашенный», позволяющий задать параметры закраски и осуществить закраску;
– класс «Фигура-контур» потомок класса «Фигура» (на основе класса, разработанного в лабораторной работе №2);
– класс «Закрашенная фигура» потомок класса «Фигура-контур». Класс «Закрашенный» при этом использовать либо как второго родителя (множественное наследование), либо как часть класса «Закрашенная фигура» (агрегация);
– класс «Комбинированная фигура», реализующий две вложенные фигуры, с закраской между ними.
Фигура – трапеция.
2. Описание классов
Figure
Figure()- конструктор
~Figure() - деструктор
virtual draw() - рисует фигуру(ромб)
calculation() - считает координаты вершин ромба
enter(int x,int y,int lx,int ly,int alf) – ввод данных – координаты точки
пересечения диагоналей, их длины, угол наклона почасовой стрелке
Color
Color()- конструктор
~Color()- деструктор
options(int gm) – установка графических опций (для заливки +толщина и цвет
линии)
filling(int x,int y) – заливка, x,y – координаты заливки
Figcont
Figcont()- конструктор
~Figcont()- деструктор
draw() - рисует контур ромба
options(int gm) – устанавливает графические опции (для линий)
Colorfig
Colorfig() - конструктор
~Colorfig() - деструктор
draw() – рисует закрашенный ромб
Dupfig
Dupfig();- конструктор
~Dupfig();- деструктор
void draw() {Figure::draw();Color::filling(xo,yo);} – рисует закрашенный ромб
(внешний)
void draw2() – рисует внутренний ромб
void dup(int x,int y,int lx,int ly,int alf) – рисует два вложенных ромба,
требуется ввести параметры внутреннего ромба
3. Текст программы
Файл: multclas.cpp
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---Figura
class Figure
{public:
int xo,yo,dx,dy,angle,x[4],y[4];
Figure();
~Figure();
virtual void draw();
void calculation();
void enter(int x,int y,int lx,int ly,int alf);
};
Figure::Figure()
{};
Figure::~Figure()
{};
void Figure::enter(int x,int y,int lx,int ly,int alf)
{xo=x;
yo=y;
dx=lx;
dy=ly;
angle=alf;
calculation();
}
void Figure::calculation()
{float cx, sx, cy, sy;
cx=dx*cos(angle*0.0175);
sx=dx*sin(angle*0.0175);
sy=dy*sin(angle*0.0175);
cy=dy*cos(angle*0.0175);
x[1]=xo-cx;
y[1]=yo-sx;
x[2]=xo+sy;
y[2]=yo-cy;
x[3]=xo+cx;
y[3]=yo+sx;
x[4]=xo-sy;
y[4]=yo+cy;
}
void Figure::draw()
{line (x[1],y[1],x[2],y[2]);
line (x[2],y[2],x[3],y[3]);
line (x[3],y[3],x[4],y[4]);
line (x[4],y[4],x[1],y[1]);
};
//---Zalivka
class Color
{public:
int fl,cl,tf,cf;
Color();
~Color();
void options(int gm);
void filling(int x,int y);
};
Color::Color()
{fl=1;
cl=7;
tf=1;
cf=15;
setcolor(cl);
setlinestyle(0,0,fl);
};
Color::~Color()
{};
void Color::options(int gm)
{int a;
restorecrtmode();
do{
clrscr();
printf ("LINE:\n 1 - Fat (1 or 3)\n 2 - Color\n\nFILL:\n 3 - Type\n 4 - Color\n\n 0 - Back\n");
scanf ("%d",&a);
switch (a)
{case 1: clrscr();printf ("1 or 3\n\n");
scanf ("%d",&fl); break;
case 2: clrscr();printf ("1 - Blue\n2 - Green\n3 - Gray\n4 - Red\n5 - Magenta\n6 - Brown\n7 - LightGray\n8 - DarkGray\n9 - LightBlue\n10 - LightGreen\n11 - LightCyan\n12 - LightRed\n13 - LightMagenta\n14 - Yellow\n15 - White\n\n");
scanf ("%d",&cl); break;
case 3: clrscr();printf ("1 -- Solid fill\n2 -- Line fill -- ||\n3 -- LtSlash -- //\n4 -- Slash -- ///\n5 -- BkSlash -- \\\ \n6 -- LtBkSlash -- \\ \n7 -- Hatch fill -- +\n8 -- XHatch fill -- x\n9 -- InterLeave fill\n10 - Wide Dot fill - ..\n11 - Close Dot fill - ::\n\n");
scanf ("%d",&tf); break;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.