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

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

B C

       
   


D

Отметим, что виртуальность класса – это не свойство класса, а результат особенностей процедуры наследования.

Один и тот же класс при множественном наследовании может, включен в производный класс при непрямом наследовании и как виртуальный и как не виртуальный.

X X X

B Y Z C

A

class X {...};

class Y: virtual public X {... };

class Z: virtual public X {... };

class B: public X {... };

class C: public X {... };

class A: public B, public Y, public Z, public C {... };

Объект класса А включает три экземпляра класса X: один виртуальный, общий для классов Y и Z, и два не виртуальных, относящихся к классам В и С.

Виртуальный класс может быть прямым родителем:

class X {... };

class A: virtual public X {... };

class B: virtual public X {... };

class D: public A, public B, virtual public X {... };

X

A B

D

При наследовании, особенно множественном могут возникать неоднозначности при доступе к одноименным компонентам разных базовых классов.

Способ устранения неоднозначностей – использование квалифицированных имен компонент (включающих имена классов и операцию принадлежности “::”).





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



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