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


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


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


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


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


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


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


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


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


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



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

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

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. Якщо базовий клас успадковується і як віртуальний, і звичайним образом, у похідному класі будуть присутні окремі екземпляри для кожного невіртуального входження і ще один екземпляр для віртуального.

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




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

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

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

  

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


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