Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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





Дата публикования: 2014-11-28; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...