Отчет по лабораторным работам по "Технологии программирования"

Автор работы: Пользователь скрыл имя, 03 Марта 2013 в 20:31, лабораторная работа

Описание работы

Цель работы:
Изучить основы объектно-ориентированного программирования на алгоритмическом языке С++. Получить представление об организации инкапсуляции, наследования и полиморфизма.
Порядок выполнения работы
1. Изучить предлагаемую программу изображения элементарных графических образов. Исследовать порядок наследования.
2. Ввести в схему наследования новый класс графической фигуры предложенный преподавателем.
3. В разрабатываемом классе графической фигуры определить атрибуты и сделать их полями класса.

Файлы: 1 файл

мой отчет по быкову.doc

— 120.00 Кб (Скачать файл)

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

Государственное образовательное учреждение

высшего профессионального  образования

«Владимирский государственный университет

имени А.Г. и  Н.Г. Столетовых»

Кафедра «Вычислительная  техника»

 

 

 

 

 

Отчет по лабораторным работам

 

по дисциплине

«Технология программирования»

 

 

 

 

 

 

 

Выполнил:

ст. гр. ЗЭВМу-108

Мелехин М.О.

 

 

 

Принял:

доцент

Быков В.И.

 

 

 

 

 

 

 

 

 

Владимир 2011

Лабораторная работа № 1 
ПРОСТОЕ НАСЛЕДОВАНИЕ КЛАССОВ

 

Цель работы:

Изучить основы объектно-ориентированного программирования на алгоритмическом языке С++. Получить представление об организации инкапсуляции, наследования и полиморфизма.

Порядок выполнения работы

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*direction);

      F1->SetNewColor(color);

      delay(100);

    };

  F1->Hide();

  // вызов деструктора

  delete F1;

  // выкл. графический режим.

  closegraph();

  return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Лабораторная работа № 2 
МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ КЛАССОВ

 

Цель работы

Изучить средства множественного наследования классов  в алгоритмическом языке С++. Исследовать особенности выполнения конструкторов и деструкторов при использовании виртуальных базовых классов.

 

Порядок выполнения работы

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));

Информация о работе Отчет по лабораторным работам по "Технологии программирования"