Отношения между классами: агрегация, обобщение, зависимость (Лабораторная работа № 4), страница 2

case 4: clrscr();printf ("1 - Blue\n2 - Green\n3 - Gray\n4 - Red\n5 - Magenta\n6 - Brown\n7 - LightGray\n8 - DarkGray\n9 - LightBlue\n10 - LightGreen\n11 - LightCyan\n12 - LightRed\n13 - LightMagenta\n14 - Yellow\n15 - White\n\n");

            scanf ("%d",&cf); break;

  case 0: break;

 }

 }while (a>0);

 setgraphmode(gm);

 setcolor(cl);

 setlinestyle(0,0,fl);

};

void Color::filling(int x,int y)

{floodfill(x,y,cl);

};

//---contur

class Figcont: public Figure

{public:

 Figcont();

 ~Figcont();

 void draw() {Figure::draw();};

 void options(int gm);

};

 Figcont::Figcont()

 {};

 Figcont::~Figcont()

 {};

 void Figcont::options(int gm)

 {int fl=1,cl=15,tl=0, a;

 restorecrtmode();

 do{

 clrscr();

 printf ("LINE:\n 1 - Fat (1 or 3)\n 2 - Color\n 3 - Type\n\n 0 - Back\n");

 scanf ("%d",&a);

 switch (a)

 {case 1: clrscr();printf ("1 or 3\n\n");

            scanf ("%d",&fl); break;

  case 2: clrscr();printf ("1 - Blue\n2 - Green\n3 - Gray\n4 - Red\n5 - Magenta\n6 - Brown\n7 - LightGray\n8 - DarkGray\n9 - LightBlue\n10 - LightGreen\n11 - LightCyan\n12 - LightRed\n13 - LightMagenta\n14 - Yellow\n15 - White\n\n");

            scanf ("%d",&cl); break;

  case 3: clrscr();printf ("0 - Solid line\n1 - Dotted line\n2 - Center line\n3 - Dashed line\n\n");

            scanf ("%d",&tl); break;

  case 0: break;

 }

 }while (a>0);

 setgraphmode(gm);

 setcolor(cl);

 setlinestyle(tl,0,fl);

 };

//---Color

class Colorfig: public Figure, public Color

{public:

 Colorfig();

 ~Colorfig();

 void draw() {Figure::draw(); setfillstyle(tf,cf); Colorfig::filling(xo,yo);};

};

 Colorfig::Colorfig()

 {};

 Colorfig::~Colorfig()

 {};

//-----------------dup

class Dupfig: public Figure, public Color

{public:

 Dupfig();

 ~Dupfig();

 void draw() {Figure::draw();Color::filling(xo,yo);};

 void draw2();

 void dup(int x,int y,int lx,int ly,int alf);

};

 Dupfig::Dupfig()

 {};

 Dupfig::~Dupfig()

 {};

void Dupfig::draw2()

{setfillstyle(0,0);

 draw();

 setfillstyle(tf,cf);

}

void Dupfig::dup(int x,int y,int lx,int ly,int alf)

{setfillstyle(tf,cf);

 draw();

 enter(x,y,lx,ly,alf);

 draw2();

}

Файл:main.cpp

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include "multclas.cpp"

void main()

{int choice, gmode;;

 int gdriver = DETECT, errorcode;

 initgraph(&gdriver, &gmode, "C:\\bc\\bgi");

 errorcode = graphresult();

 if (errorcode != grOk)

 {

    printf("Graphics error: %s\n", grapherrormsg(errorcode));

    printf("Press any key to halt:");

    getch();

    exit(1);

 }

 int xx,yy,lx,ly,alf, i;

 do{

 printf ("1 - Kontur\n2 - Zalitaja\n3 - Dvojnaja\n\n");

 scanf ("%d",&i);

 switch (i){

 case 1:

           Figcont R;

           R.Figcont::options(gmode);

           printf ("X, Y, LX, LY, Alf\n");

           scanf ("%d%d%d%d%d",&xx,&yy,&lx,&ly,&alf);

           R.Figcont::enter(xx,yy,lx,ly,alf);

           R.Figcont::draw();

           break;

 case 2:

           Colorfig C;

           C.Colorfig::options(gmode);

           printf ("X, Y, LX, LY, Alf\n");

           scanf ("%d%d%d%d%d",&xx,&yy,&lx,&ly,&alf);

           C.Colorfig::enter(xx,yy,lx,ly,alf);

           C.Colorfig::draw();

           break;

 case 3:

           Dupfig D;

           D.Dupfig::options(gmode);

           printf ("BIG - X, Y, LX, LY, Alf\n");

           scanf ("%d%d%d%d%d",&xx,&yy,&lx,&ly,&alf);

           D.Dupfig::enter(xx,yy,lx,ly,alf);

           printf ("Small - X, Y, LX, LY, Alf\n");

           scanf ("%d%d%d%d%d",&xx,&yy,&lx,&ly,&alf);

           D.Dupfig::dup(xx,yy,lx,ly,alf);

           break;

 break;}

 getch();

 }while (i>0);

}

4. Набор тестов

№ теста

Тип фигуры, данные и функция

Результат

1

Figcont

320 240 150 100 30

draw

Незакрашенный ромб

2

Colorfig

300 200 100 50 45

draw

Закрашенный ромб

3

Dupfig

320 240 150 100 0

320 240 100 100 0

dup

Два вложенных ромба