русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Множественное наследование.


Дата добавления: 2015-07-09; просмотров: 570; Нарушение авторских прав


Множественное наследование означает, что класс имеет несколько базовых клас­сов. Если в базовых классах есть одноименные элементы, при этом может про­изойти конфликт идентификаторов, который устраняется с помощью операции доступа к области видимости:

class monstr{

public: int get_health();

class hero{

public: int get_health();

 

}:

class ostrich: public monstr, public hero{ }:

int main(){ ostrich A;

cout « A.monstr::get_health(); cout « A.hero::get_health();

}

Как видно из примера, для вызова метода gethealth требуется явно указывать класс, в котором он описан. Использование обычной для вызова метода класса конструкции A.gethealthO приведет к ошибке, поскольку компилятор не в состоянии разобраться, к методу какого из базовых классов требуется обра­титься.

Если у базовых классов есть общий предок, это приведет к тому, что производ­ный от этих базовых класс унаследует два экземпляра полей предка, что чаще всего является нежелательным. Чтобы избежать такой ситуации, требуется при наследовании общего предка определить его как виртуальный класс:

class monstr{ }:

class daemon: virtual public monstr{ }:

class lady: virtual public monstr{

 

class baby: public daemon, public lady{ }:

Класс baby содержит только один экземпляр полей класса monstr. Если базовый класс наследуется и как виртуальный, и обычным образом, в производном классе будут присутствовать отдельные экземпляры для каждого невиртуального вхож­дения и еще один экземпляр для виртуального.

Множественное наследование применяется для того, чтобы обеспечить произ­водный класс свойствами двух или более базовых. Чаще всего один из этих классов является основным, а другие обеспечивают некоторые дополнительные свойства, поэтому они называются классами подмешивания. По возможности классы подмешивания должны быть виртуальными и создаваться с помощью конструкторов без параметров, что позволяет избежать многих проблем, возни­кающих при ромбовидном наследовании (когда у базовых классов есть общий предок).



 

42.Идентификация типа во время выполнения.

43.Средства преобразования типов.

 



<== предыдущая лекция | следующая лекция ==>
Шаблоны классов. | Явные преобразования static_cast, dynamic_cast.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.39 сек.