Выявление и реализация отношений наследования между классами (Отчет по лабораторной работе № 4)

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

Содержание работы

Министерство образования и науки Украины

Харьковский национальный университет радиоэлектроники

Кафедра ЭВМ

Отчет по лабораторной работе №4

«Наследование»

Выполнил:                                                                                    Проверил:

Харьков 2005

1 Цель работы

Научиться выявлять и реализовывать отношение наследования между классами.

2 Задание

Вариант 2.

Даны два класса: square и triangle. Объекты этих классов могут быть отображены на экране с помощью функции-члена draw и перемещены с помощью функции-члена move_to. Создать объекты указанных классов, начертить их в нескольких положениях.

Создать общий базовый класс figure, от которого будут наследованы указанные классы. В базовый класс нужно поместить все, что является общим у исходных классов. Добавить функцию-член set_color. Добавить функцию-член rotate. Использовать указанные функции.

3 Текст программы

// lab_inherit.cpp

…//создание объектов

          static square sq(5,5,20,40);

          static triangle tr(120,130,20,60,100,50);

          static figure *cf=&tr;

…//управление объектами

          case WM_KEYDOWN:

                              switch(wParam)

                              {

                                       case '1':

                                                 cf->set_color(RGB(0,0,255));

                                                 break;

                                       case '2':

                                                 cf->set_color(RGB(0,255,0));

                                                 break;

                                       case '3':

                                                 cf->set_color(RGB(255,0,0));

                                                 break;

                                       case VK_SPACE:

                                                 if(cf==&tr)

                                                           cf=&sq;

                                                 else

                                                           cf=&tr;

                                                 break;

                                       case VK_UP:

                                                 cf->moveto(0,-5);

                                                 break;

                                       case VK_DOWN:

                                                 cf->moveto(0,5);

                                                 break;

                                       case VK_LEFT:

                                                 cf->moveto(-5,0);

                                                 break;

                                       case VK_RIGHT:

                                                 cf->moveto(5,0);

                                                 break;

                                       case VK_ESCAPE:

                                                 cf->rotate(5);

                                                 break;

                              }

                              InvalidateRect(hWnd,NULL,TRUE);

                              break;

…//прорисовка объектов

                                       sq.draw(hdc);

                                       tr.draw(hdc);

// shape_derived.cpp

#include "stdafx.h"

#include "shape_derived.h"

#include <cmath>

#include <cassert>

figure::figure():

col_(RGB(0,0,0))

{}

void figure::set_color(COLORREF col)

{

          col_=col;

}

square::square(int x, int y, int a, int b)

:figure(),x_ (x),y_ (y),a_ (a),b_ (b)

{}

void square::draw(HDC hdc)const

{

          HPEN pen=CreatePen(PS_SOLID,0,col_);

          HGDIOBJ old=SelectObject(hdc,pen);

          ::Rectangle(hdc,x_,y_,x_+a_,y_+b_);

          SelectObject(hdc,old);

          DeleteObject(pen);

}

void square::moveto(int r, int d)

{

          x_=x_+r;

          y_=y_+d;

}

void square::rotate(double angle)

{

          double newx,newy;

          const double pi=3.14159265;

          х_=(int)newx;y_=(int)newy;

}

triangle::triangle(int x,int y,int x1, int y1,int x2, int y2)

:figure(),

x_(x),y_(y),x1_(x1),y1_(y1), x2_ (x2),y2_ (y2)

{}

void triangle::draw(HDC hdc)const

{

          HPEN pen=CreatePen(PS_SOLID,0,col_);

          HGDIOBJ old=SelectObject(hdc,pen);

          ::MoveToEx(hdc,x_,y_,NULL);

          ::LineTo(hdc, x1_, y1_);

          ::LineTo(hdc, x2_, y2_);

          ::LineTo(hdc, x_, y_);

          SelectObject(hdc,old);

          DeleteObject(pen);

}

void triangle::rotate(double angle)

{

          double newx1,newy1,newx2,newy2;

          const double pi=3.14159265;

          ::rotate(dx1_,dy1_,angle*pi/180.,&newx1,&newy1);

          ::rotate(dx2_,dy2_,angle*pi/180.,&newx2,&newy2);

          dx1_=(int)newx1;dy1_=(int)newy1;

          dx2_=(int)newx2;dy2_=(int)newy2;

}

void triangle::moveto(int r, int d)

{

          x_=x_+r;

          y_=y_+d;

          x1_=x1_+r;

          y1_=y1_+d;

          x2_=x2_+r;

          y2_=y2_+d;

}

void rotate(double x, double y,double angle,double* px,double *py){

          double sa=sin(angle);

          double ca=cos(angle);

          *px=ca*x+sa*y;

          *py=sa*x+ca*y;

}

// shape_derived.h

#pragma once

class figure

{

public:

          figure ();

          void set_color(COLORREF);

          virtual void draw(HDC)const=0;

          virtual void moveto(int , int )=0;

          virtual void rotate(double)=0;

protected:

          COLORREF col_;

};

class square:public figure {

public:

          square(int x,int y, int a,int b);

          void draw(HDC)const;

          void moveto(int r,int d);

          void rotate(double angle);

protected:

          int x_, y_, a_,b_;

};

class triangle:public figure

{

public:

          triangle(int x,int y,int x1, int y1, int x2, int y2);

          void draw(HDC)const;

          void moveto(int r,int d);

          void rotate(double angle);

protected:

          int x_, y_, x1_, y1_, x2_, y2_;

};

4 Выводы

Научились создавать родительские и дочерние классы.

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

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