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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

Лабораторна робота №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. Результати виконання.

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

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

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.