Множинне наслідування в С++, вирішення проблем, які з’являються при такому наслідуванні

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

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

Лабораторна робота №5

Тема: Множине наслідування в С++.

Мета роботи: Освоєння множинного наслідування в С++ і вирішення проблем, які з’являються при такому наслідуванні.

­1.Індивідуальне завдання.

 Додати в ієрархію класів лабораторної роботи №5 клас по свому вподобанню, але таким чином, щоб реалізувати наступну схему наслідування.

                                 /  Клас 3 \

Клас 1  -> Клас 2                    Клас 5

.                                \  Клас 4 /

Завдання: крапка -> трикутник -> трикутник у трикутнику->коло у трикутнику та трикутнику.

2.Текст програми.


#include <graphics.h>    // graphics library declarations

#include <conio.h>       // for getch() function

#include <stdlib.h>      // for randomize() function

#include <dos.h>         // for delay() function

#include <iostream.h>

#include <iomanip.h>

#include <stdio.h>

#include <math.h>

 void main();

class CPoint

{

 public:

   int x,y,r;

   CPoint(void){};

   void Init(int IX, int IY, int IR);

   virtual void Show();

   virtual void Hide();

   void Zoom(int DR);

   void Move(int DX, int DY, int DR);

};

class CTtreyg: public CPoint

{

 public:

   CTtreyg(void){};

   virtual void Show(void);

   virtual void Hide(void);

};

class CTtrInCir: virtual public CTtreyg

{

 public:

   CTtrInCir(void){};

   virtual void Show(void);

   virtual void Hide(void);

};

class CSq :  virtual public CTtreyg

{

 public:

   CSq(void){};

   virtual void Show(void);

   virtual void Hide(void);

};

class CSqCir : public CTtrInCir, public CSq

{

 public:

   CSqCir(void){};

   virtual void Show(void);

   virtual void Hide(void);

};

//--------------------------------------------------------}

//--------------------------------------------------------}

void CPoint::Init(int IX, int IY, int IR)

{

 x=IX;

 y=IY;

 r=IR;

};

void CPoint::Show(void)

{

 putpixel(x,y, 14);

};

void CPoint::Hide(void)

{

 putpixel(x,y, 0);

};

void CPoint::Zoom(int DR)

{

 r=r+DR;

};

void CPoint::Move(int DX, int DY, int DR)

{

   Hide();

   x+= DX;

   y+= DY;

   Zoom(DR);

   Show();

};

//--------------------------------------------------------}

//--------------------------------------------------------}

void CTtreyg::Show()

{

       setcolor(11);

       line(x,y-r,x+r*sqrt(3)/2,y+r/2);

       line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

       line(x-r*sqrt(3)/2,y+r/2,x,y-r);

};

void CTtreyg::Hide()

{

 setcolor(0);

 line(x,y-r,x+r*sqrt(3)/2,y+r/2);

 line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

 line(x-r*sqrt(3)/2,y+r/2,x,y-r);

};

//--------------------------------------------------------}

//--------------------------------------------------------}

void CTtrInCir::Show()

{

 setcolor(13);

       line(x,y-r,x+r*sqrt(3)/2,y+r/2);

       line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

       line(x-r*sqrt(3)/2,y+r/2,x,y-r);

       line(x,y+r/2,x-(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(r-(r/2)*(sqrt(3)/2),y-(r/2)/2,x+(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x+(r/2)*(sqrt(3)/2),y-(r/2)/2,x,y+r/2);

};

void CTtrInCir::Hide()

{

 setcolor(0);

       line(x,y-r,x+r*sqrt(3)/2,y+r/2);

       line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

       line(x-r*sqrt(3)/2,y+r/2,x,y-r);

       line(x,y+r/2,x-(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x-(r/2)*(sqrt(3)/2),y-(r/2)/2,x+(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x+(r/2)*(sqrt(3)/2),y-(r/2)/2,x,y+r/2);

};

//--------------------------------------------------------}

//--------------------------------------------------------}

void CSqCir::Show()

{

 setcolor(17);

       line(x,y-r,x+r*sqrt(3)/2,y+r/2);

       line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

       line(x-r*sqrt(3)/2,y+r/2,x,y-r);

       line(x,y+r/2,x-(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x-(r/2)*(sqrt(3)/2),y-(r/2)/2,x+(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x+(r/2)*(sqrt(3)/2),y-(r/2)/2,x,y+r/2);

       circle(x,y, r/4);

};

void CSqCir::Hide()

{

  setcolor(0);

       line(x,y-r,x+r*sqrt(3)/2,y+r/2);

       line(x+r*sqrt(3)/2,y+r/2,x-r*sqrt(3)/2,y+r/2);

       line(x-r*sqrt(3)/2,y+r/2,x,y-r);

       line(x,y+r/2,x-(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x-(r/2)*(sqrt(3)/2),y-(r/2)/2,x+(r/2)*(sqrt(3)/2),y-(r/2)/2);

       line(x+(r/2)*(sqrt(3)/2),y-(r/2)/2,x,y+r/2);

       circle(x,y, r/4);

};

void main(void)

{

 // initialize the graphics system

 int i;

 int graphdriver = DETECT, graphmode;

 initgraph(&graphdriver, &graphmode, "c:\\dosapp\\borlandc\\bgi");

 cleardevice();

 randomize();

 CPoint Point[5];

 CTtreyg Ttreyg[5];

 CTtrInCir TtrInCir[5];

 CSq Sq[5];

 CSqCir SqCirs[5];

for (i=0;i<5;i++)

 {

  Point[i].Init(200+random(100),150+random(100),0);

  Point[i].Show();

  Ttreyg[i].Init(100+random(200),50+random(200),20);

  Ttreyg[i].Show();

  TtrInCir[i].Init(300+random(200),100+random(200),30);

  TtrInCir[i].Show();

  Sq[i].Init(250+random(200),200+random(200),40);

  Sq[i].Show();

  SqCirs[i].Init(250+random(200),200+random(200),40);

  SqCirs[i].Show();

 }

 while(!kbhit())

 {

  for (int i=0;i<5;i++)

  {

   Point[i].Move(1,0,2-random(5));

   Ttreyg[i].Move(1,1,2-random(5));

   TtrInCir[i].Move(-1,1,2-random(5));

   Sq[i].Move(-1,-1,2-random(5));

   SqCirs[i].Move(0,1,2-random(5));

}

  delay(40);

 }

 closegraph();

}


3. Результати виконання.

Отримали зображення: крапка -> трикутник -> трикутник у трикутнику->коло у трикутнику та трикутнику.

Висновок: Проаналізували проблему неоднозначності і вирішити її з допомогою використання віртуальних класів.

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

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