Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Множинне спадкування

Множинне спадкування означає, що клас має кілька базових класів. Якщо в базових класах є однойменні елементи, при цьому може відбутися конфлікт ідентифікаторів, що усувається за допомогою операції доступу до області видимості:

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();

}

Як видно з приклада, для виклику методу get_health потрібно явно вказувати клас, у якому він описаний. Використання звичайної для виклику методу класу конструкції A.get_hea1th() приведе до помилки, оскільки компілятор не в змозі розібратися, до методу якого з базових класів потрібно звернутися.

Якщо в базових класів є загальний предок, це приведе до того, що похідний від цих базових клас успадкує два екземпляри полів предка, що найчастіше є небажаним. Щоб уникнути такої ситуації, потрібно при спадкуванні загального предка визначити його як віртуальний клас:

class monstr{

};

class daemon: virtual public monstr{

}:

class lady: virtual public monstr{

};

class baby: public daemon, public lady{

};

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

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




Переглядів: 417

<== попередня сторінка | наступна сторінка ==>
Абстрактні класи | Відмінності структур і об'єднань від класів.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.005 сек.