Автор работы: Пользователь скрыл имя, 03 Марта 2013 в 20:31, лабораторная работа
Цель работы:
Изучить основы объектно-ориентированного программирования на алгоритмическом языке С++. Получить представление об организации инкапсуляции, наследования и полиморфизма.
Порядок выполнения работы
1. Изучить предлагаемую программу изображения элементарных графических образов. Исследовать порядок наследования.
2. Ввести в схему наследования новый класс графической фигуры предложенный преподавателем.
3. В разрабатываемом классе графической фигуры определить атрибуты и сделать их полями класса.
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
«Владимирский государственный университет
имени А.Г. и Н.Г. Столетовых»
Кафедра «Вычислительная техника»
Отчет по лабораторным работам
по дисциплине
«Технология программирования»
Выполнил:
ст. гр. ЗЭВМу-108
Мелехин М.О.
Принял:
доцент
Быков В.И.
Владимир 2011
Цель работы:
Изучить основы объектно-ориентированного программирования на алгоритмическом языке С++. Получить представление об организации инкапсуляции, наследования и полиморфизма.
Порядок выполнения работы
1. Изучить предлагаемую программу изображения элементарных графических образов. Исследовать порядок наследования.
2. Ввести в схему наследования новый класс графической фигуры предложенный преподавателем.
3. В разрабатываемом классе графической фигуры определить атрибуты и сделать их полями класса.
4. Создать в программе экземпляр нового класса в виде локальной переменной и исследовать его поведение.
5. Изменить содержимое головной процедуры следующим образом:
– Убрать все объявления локальных объектов. Ввести указатель на объект базового класса.
– Ввести диалог выбора класса отображаемой графической фигуры.
– В зависимости от выбранного в диалоге класса графической фигуры воспроизводить любую из них (окружность, прямоугольник, сообщение или самостоятельно разработанную фигуру) с использованием указателя на объект базового класса.
Вариант 11- Цилиндр
Текст программы:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <math.h>
#include <string.h>
// Класс ФИГУРА (суперкласс)
class Figure
{
protected:
// объявление полей
int Color;
int CenterX;
int CenterY;
public:
// конструктор
Figure(int iCenterX, int iCenterY)
{
// определение полей
Color = RED;
CenterX = iCenterX;
CenterY = iCenterY;
}
// метод установки нового цвета
void SetNewColor(int NewColor)
{
Hide(); // слияние фигуры с фоном
Color=NewColor;// установки нового цвета
Show();// отображения фигуры
}
// метод отображения фигуры
virtual void Show() = 0;
// метод слияние фигуры с фоном
virtual void Hide()
{
int prev_col = Color;// запоминаем текущий цвет фигуры
Color = getbkcolor();// текущий цвет фигуры становится = цвет фона
Show(); // отображения фигуры
Color = prev_col; // восстанавливаем текущий цвет фигуры
}
// метод сдвига изображения
void Move(int DeltaX, int DeltaY)
{
Hide();
CenterX+=DeltaX;// новое положение по X
CenterY+=DeltaY;// новое положение по Y
Show();
}
// Деструктор
virtual ~Figure()
{};
};
// Класс ОКРУЖНОСТЬ
class Circle: public Figure
{
private:
int Radius;
public:
Circle(int iCenterX, int iCenterY, int iRadius) :
Figure(iCenterX, iCenterY)
{
Radius = iRadius;
}
void Show();
};
// Класс ПРЯМОУГОЛЬНИК
class Rectangle: public Figure
{
private:
int h; // Высота
int w; // Ширина
public:
Rectangle(int iCenterX, int iCenterY, int ih, int iw) :
Figure(iCenterX, iCenterY)
{
h = ih;
w = iw;
}
void Show();
};
// Класс СООБЩЕНИЕ
class Message: public Figure
{
private:
char* String;
public:
Message(int iCenterX, int iCenterY, char* Msg) :
Figure(iCenterX, iCenterY)
{
String = new char [strlen(Msg)+1];
strcpy(String, Msg);
}
void Show();
~Message()
{
delete String;
}
};
// Класс Silinder
class Silinder: public Figure
{
private:
int Radius;
public:
Silinder( int iCenterX, // началное положение по X
int iCenterY, // началное положение по Y
int iRadius ): // радиус
Figure(iCenterX, iCenterY)
{
Radius = iRadius;
}
// переопределение(замещение) метода Show()
void Show();
};
// Класс KonsPriyam
class KonsPriyam: public Figure
{
private:
int Size;
public:
KonsPriyam( int iCenterX, // началное положение по X
int iCenterY, // началное положение по Y
int iSize ): // радиус
Figure(iCenterX, iCenterY)
{
Size = iSize;
}
// переопределение(замещение) метода Show()
void Show();
};
// Методы класса Silinder
void Silinder::Show()
{
int prev_color=getcolor();
setcolor(Color);
line(CenterX - Radius / 2, CenterY - Radius / 2, CenterX - Radius / 2, CenterY + Radius / 2);
line(CenterX + Radius / 2, CenterY - Radius / 2, CenterX + Radius / 2, CenterY + Radius / 2);
ellipse(CenterX, CenterY + Radius / 2, 0,360, Radius / 2, Radius / 3);
ellipse(CenterX, CenterY - Radius / 2, 0,360, Radius / 2, Radius / 3);
setcolor(prev_color);
}
// Методы ОКРУЖНОСТИ
void Circle::Show()
{
int prev_color=getcolor();
setcolor(Color);
circle(CenterX, CenterY, Radius);
setcolor(prev_color);
}
// METODI KonsPriyam
void KonsPriyam::Show()
{
int prev_color=getcolor();
setcolor(Color);
rectangle( CenterX - Size / 2, CenterY - Size / 2,
CenterX + Size / 2, CenterY + Size / 2);
rectangle( CenterX - Size / 3, CenterY - Size / 3,
CenterX + Size / 3, CenterY + Size / 3);
setcolor(prev_color);
}
// Методы ПРЯМОУГОЛЬНИКА
void Rectangle::Show()
{
int prev_color=getcolor();
setcolor(Color);
rectangle(CenterX, CenterY, CenterX+w, CenterY+h);
setcolor(prev_color);
}
// Методы СООБЩЕНИЯ
void Message::Show()
{
int prev_color=getcolor();
setcolor(Color);
outtextxy(CenterX, CenterY, String);
setcolor(prev_color);
}
// Головная функция
int main()
{
int figure_sel; // выбранная фигура
int direction = 1;// направление
int gdriver = DETECT, gmode, errorcode;
// Диалог выбора объекта
cout<<"Select Object :\n";
cout<<"1 - Circle\n";
cout<<"2 - Rectangle\n";
cout<<"3 - Message\n";
cout<<"4 - Silinder\n";
cout<<"5 - KonsPriyam\n";
cout<<"Any other number - Exit\n";
cout<<"Number: ";
cin>>figure_sel;
if ((figure_sel>5) || (figure_sel<1)) return 0;
// инициализация графики
initgraph(&gdriver, &gmode,
"..\\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
cerr<<"Graphics error";
cerr<<grapherrormsg(errorcode)
exit(1);
}
// указатель на объект
Figure *F1;
switch (figure_sel)
{ // фактический объект класса Circle
case 1: {F1 = new Circle(10,10,50);break;}
// фактический объект классa Rectangle
case 2: {F1 = new Rectangle(10,10,60,50);break;}
// фактический объект классa Message
case 3: {F1 = new Message(10,10,"C++!");break;}
// фактический объект классa Silinder
case 4: {F1 = new Silinder (10,10,30);break;}
// фактический объект классa KonsPriyam
case 5: {F1 = new KonsPriyam (10,10,50);break;}
};
F1->Show();
// получение максимального кол-ва цветов, для текущего видео режима
int maxcolor = getmaxcolor();
// анимация фигуры
for (int color = 0; !kbhit(); color++)
{
if (color>maxcolor)
{color=0; direction*=-1;}
F1->Move(10*direction,10*
F1->SetNewColor(color);
delay(100);
};
F1->Hide();
// вызов деструктора
delete F1;
// выкл. графический режим.
closegraph();
return 0;
}
Цель работы
Изучить средства множественного наследования классов в алгоритмическом языке С++. Исследовать особенности выполнения конструкторов и деструкторов при использовании виртуальных базовых классов.
Порядок выполнения работы
1. Разработать новый класс графической фигуры, который одновременно является подклассом класса, разработанного в лабораторной работе N1, и одного из предложенных ранее классов графических фигур (по заданию преподавателя).
2. Добавить в головную программу создание и удаление объекта разработанного класса.
3. Исследовать порядок вызова конструкторов при инициализации и деструкторов при разрушении объектов. Для этого добавить в конструкторы и деструкторы всех классов промежуточный вывод соответствующих сообщений.
Текст программы:
# include <iostream.h>
# include <conio.h>
# include <stdlib.h>
# include <stdio.h>
# include <dos.h>
# include <graphics.h>
# include <string.h>
char s[255] = "";
//Class Figure
class Figure
{ protected:
int Color;
int CenterX;
int CenterY;
public:
Figure (int iCenterX, int iCenterY)
{
Color=RED;
CenterX=iCenterX;
CenterY=iCenterY;
strcat(s, "Create class Figure \n");
}
void SetNewColor (int NewColor)
{Hide(); Color=NewColor; Show();}
virtual void Show () = 0;
virtual void Hide ()
{
int prev_col=Color;
Color=getbkcolor();
Show();
Color=prev_col;
}
void Move (int DeltaX, int DeltaY)
{
Hide();
CenterX+=DeltaX;
CenterY+=DeltaY;
Show();
}
virtual ~Figure()
{strcat(s, "Del class Figure \n");};
};
// Класс цилиндра
class Cylinder: public Figure
{
private:
int Radius;//а ¤Ёгб н«ЁЇб 1
int h;
public:
Cylinder(int iCenterX, int iCenterY, int iRadius) :
Figure(iCenterX, iCenterY)
{
Radius = iRadius/1.42;
h = iRadius;
strcat(s,"Create class Cylinder \n");
}
void Show();
virtual ~Cylinder()
{strcat(s, "Del class Cylinder \n");};
};
// ЊҐв®¤л –€‹€Ќ„ђЂ
void Cylinder::Show()
{
int prev_color=getcolor();
setcolor(Color);
ellipse(CenterX, CenterY, 0, 360, Radius, Radius/3);
ellipse(CenterX, CenterY+h, 0, 360, Radius, Radius/3);
line(CenterX+Radius, CenterY, CenterX+Radius, CenterY+h);
line(CenterX-Radius, CenterY, CenterX-Radius, CenterY+h);
setcolor(prev_color);
}
//Class Cube
class Cube: public Figure
{
private:
int h;
public:
Cube (int iCenterX, int iCenterY, int ih ):
Figure (iCenterX, iCenterY)
{
h = ih;
strcat(s,"Create class Cube \n");
}
//Metod Cube
void ShowF ()
{ int prev_color=getcolor();
setcolor(Color);
line (CenterX-h/1.77, (CenterY+h/7.5), (CenterX+h/3.34), (CenterY+h/5));
line (CenterX+h/3.34, (CenterY+h/5), (CenterX+h/1.77), (CenterY-h/7.5));
line ((CenterX+h/3.34), (CenterY+h/5), (CenterX+h/3.34), CenterY+h/0.83);
line ((CenterX+h/3.34), (CenterY+h/0.83), (CenterX-h/1.77), CenterY+h/0.88);
line ((CenterX+h/3.34), CenterY+h/0.83, (CenterX+h/1.77), (CenterY+h/1.15));
line ((CenterX-h/1.77), CenterY+h/0.88, (CenterX-h/1.77), (CenterY+h/7.5));
line ((CenterX-h/1.77), (CenterY+h/0.88), (CenterX-h/5), (CenterY+h/1.28));
line ((CenterX+h/1.77), (CenterY+h/1.15), (CenterX+h/1.77), (CenterY-h/7.5));
line ((CenterX+h/1.77), (CenterY+h/1.15), (CenterX-h/5), (CenterY+h/1.28));
line ((CenterX-h/5), (CenterY-h/4.7), (CenterX-h/5), (CenterY+h/1.28));
line ((CenterX-h/5), (CenterY-h/4.7), (CenterX+h/1.77), (CenterY-h/7.5));
line ((CenterX-h/5), (CenterY-h/4.7), (CenterX-h/1.77), (CenterY+h/7.5));
Информация о работе Отчет по лабораторным работам по "Технологии программирования"