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

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



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

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

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





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



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