Void main ( ). class ellips: public point {

Spotelli

// ellips.cpp

#ifndef ELLI

# define ELLI 1

# include”point.cpp”

class ellips: public point {

protected:

int rx, ry; //радиусы эллипса

public:

ellips (int xi, int yi, int rxi, int ryi): point(xi,yi)

{rx = rxi; ry =ryi;}

void show()

{ ellipse (x,y,0,360,rx,ry); }

void hide()

{int a, b;

a= getcolor();

b=getbkcolor();

setcolor(b);

ellipse (x,y,0,360,rx,ry);

setcolor(a);

}

};

#endif

// текст программы

#include “spot.cpp”

#include”ellips.cpp”

// класс “пятна в эллипсе”

class spotelli: public spot, public ellips {

int min(int a, int b){return((a<b)?a:b);} // вспомогательная функция

public:

spotelli(int xi, int yi, int rxi, int ryi):

spot(xi, yi, min(rxi,ryi)), // координаты центра пятна совпадают

ellips(xi, yi, rxi, ryi) {} // с центром эллипса

// Конструктор производного класса не выполняет никаких действий

void show()

{ spot::show(); // показать пятно

ellips::show();} // показать эллипс

void hide()

{spot::hide(); // убрать пятно

ellips::hide(); // убрать эллипс

}

};

{ int dr = DETECT, mod=DETECT;

// int far*t=&dr; int far *q= &mod;

initgraph (&dr, &mod, "D:\\Borlandc\\BGI");

int errorcode=graphresult();

if(errorcode!=grOk){cout<<"Ошибка "; exit(0);}

setcolor(4);

setfillstyle(1,4);

{ spotelli a1(100,100,20,80);

spotelli a2(400,300,230,100);

a1.show();getch();

a2.show(); getch();

a2.hide(); getch();

a1.hide();getch();

}

closegraph(); }

 
 


Чтобы устранить дублирование объектов непрямого базового класса при множественном наследовании, этот базовый класс объявляют виртуальным.

Причем это делается не в объявлении самого базового класса (А), а в классах, производных от него.

class A { // самый верхний базовый класс А

protected:

int x;

... };

class B: public virtual A { // класс В, производный от А

... };

class C: public virtual A { // класс С, производный от А

... };

class D: public B, public C { // класс D, производный и от В и от С

... };

Теперь объект класса D будет включать только один экземпляр класса A и к переменной x в классе D можно обращаться просто по имени, т.к. она существует в единственном экземпляре. Графически это выглядит так:

A


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: