double arrow
Void main ( ). a= getbkcolor ( ); //функция возвращает цвет фона

Void hide ( )

{int a ,b; int t = len/2;

a= getbkcolor ( ); //функция возвращает цвет фона

b= getcolor ( ); //функция возвращает цвет символов и линий

setcolor (a);

rectangle (x-t, y-t, x+ t, y+ t);// рисуем квадрат цветом фона

setcolor (b);// восстанавливаем цвет символов

}

void move ( int xn, int yn)

{ hide( );

x= xn; y= yn;

show(); }

} ;

// множественное наследование

#include <conio.h.

#include ”circ.cpp”

#include “square.cpp”

class cirsqu: public circ, public square {

// производный класс двух базовых классов, нет своих данных

public:

cirsqu( int xi, int yi, int ri) :// конструктор, параметры для

// инициализации данных базовых классов

circ(xi, yi, ri), //явно вызываются конструкторы

square(xi, yi, 2*ri) { }// базовых классов

//так чтобы координаты центра окружности и квадрата совпадали,

// а сторона квадрата была равна диаметру окружности

void show ()

{circ::show(); square::show();}

void hide()

{ circ::hide(); square::hide();}

void move(int xn,int yn)

{circ::move(xn,yn); square::move(xn,yn);}

};

{int d=DETECT, m;

initgraph(&d, &m, "D:\\Borlandc\\BGI" );

int errorcode=graphresult();

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

cirsqu a1(100,100,50);

cirsqu a2(400,300,30);

a1.show(); getch();

a2.show(); getch ();

a2.move(50,50); getch();

a2.hide(); getch();

a1.hide(); getch();

closegraph();

}

Виртуальные базовые классы

При множественном наследовании класс не может быть прямым базовым более одного раза. Однако класс может быть неоднократно косвенно базовым.

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

protected :

int x;

. . . } ;

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

. . . } ;

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

. . . } ;

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

. . . } ;

A A

B C

D

В этом случае происходит дублирование или “размножение” базового класса при множественном наследовании.




В объект класса D входят все составляющие базовых классов B и Cи следовательно члены класса А войдут в него дважды, как составляющие базового класса В и как составляющие базового класса С.В результате переменная xбудет присутствовать в двух экземплярах.

С точки зрения компилятора такая ситуация не является ошибочной. Однако при обращении к xпридется его однозначно специфицировать.

class D : public B , public C {

public:

int GetX() {return x} // не допустимо

int GetX ( ) { return B::x; }// x получено через В

SetX ( _x) { C::x = _x ;} // xполучено через С

} ;

Ниже представлена программа дублирования базового класса.

Класс “ круглое пятно , вписанное в эллипс ” – spotelliбазируется на классах spot (“пятно”) и ellips ( “эллипс”), каждый из которых базируется на классе point.

Объект базового класса point дублируется:

point point

spot ellips






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