Віртуальне успадкування (англ. virtual inheritance) — в мові програмування , це один із варіантів успадкування. Він дозволяє розв'язати деякі проблеми множинного успадкування, зокрема «ромбоподібне успадкування». Віртуальне успадкування декларується словом virtual
перед іменем базового класу.
Якщо при множинному успадкуванні серед базових класів є декілька екземплярів одного класу, що завжди успадковувався віртуально, то в похідному класі буде тільки одна копія даних такого класу.
В коді:
class Animal { public: virtual void eat(); }; class Mammal : public Animal { public: virtual void breathe(); }; class WingedAnimal : public Animal { public: virtual void flap(); }; // A bat is a winged mammal class Bat : public Mammal, public WingedAnimal { }; Bat bat;
Виклик bat.eat()
є неоднозначним, оскільки компілятор не знає кого викликати:
Mammal::Animal::eat()
чиWingedAnimal::Animal::eat()
.
Насправді, це дві незалежні функії, кожну з яких можна викликати перетворюючи тип Bat
до першого чи другого свого беспосереднього базового класу.
Також подібна неоднозначність буде при приведенні типу Bat
до типу Animal
, оскільки в кожному об'єкті Bat
міститься два об'єкта Animal
(по одному у Mammal
та WingedAnimal
).
Щоб уникнути такої незручної надлишковості, віртуальне успадкування зберігає тільки одну копію даних об'єкта Animal
в об'єкті Bat
, якщо Animal
кожен раз був успадкований віртуально.
Примітки
- Andrei Milea. . http://www.cprogramming.com/: Cprogramming.com. Архів оригіналу за 4 березня 2021. Процитовано 8 березня 2010.
One of the problems that arises due to multiple inheritance is the diamond problem. A classical illustration of this is given by Bjarne Stroustrup (the creator of C++) in the following example:
- Ralph McArdell (14 лютого 2004). . http://en.allexperts.com/: All Experts. Архів оригіналу за 10 січня 2010. Процитовано 8 березня 2010.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Virtualne uspadkuvannya angl virtual inheritance v movi programuvannya C ce odin iz variantiv uspadkuvannya Vin dozvolyaye rozv yazati deyaki problemi mnozhinnogo uspadkuvannya zokrema rombopodibne uspadkuvannya Virtualne uspadkuvannya deklaruyetsya slovom virtual pered imenem bazovogo klasu Yaksho pri mnozhinnomu uspadkuvanni sered bazovih klasiv ye dekilka ekzemplyariv odnogo klasu sho zavzhdi uspadkovuvavsya virtualno to v pohidnomu klasi bude tilki odna kopiya danih takogo klasu V kodi class Animal public virtual void eat class Mammal public Animal public virtual void breathe class WingedAnimal public Animal public virtual void flap A bat is a winged mammal class Bat public Mammal public WingedAnimal Bat bat Viklik bat eat ye neodnoznachnim oskilki kompilyator ne znaye kogo viklikati Mammal Animal eat chi WingedAnimal Animal eat Naspravdi ce dvi nezalezhni funkiyi kozhnu z yakih mozhna viklikati peretvoryuyuchi tip Bat do pershogo chi drugogo svogo besposerednogo bazovogo klasu Takozh podibna neodnoznachnist bude pri privedenni tipu Bat do tipu Animal oskilki v kozhnomu ob yekti Bat mistitsya dva ob yekta Animal po odnomu u Mammal ta WingedAnimal Shob uniknuti takoyi nezruchnoyi nadlishkovosti virtualne uspadkuvannya zberigaye tilki odnu kopiyu danih ob yekta Animal v ob yekti Bat yaksho Animal kozhen raz buv uspadkovanij virtualno PrimitkiAndrei Milea http www cprogramming com Cprogramming com Arhiv originalu za 4 bereznya 2021 Procitovano 8 bereznya 2010 One of the problems that arises due to multiple inheritance is the diamond problem A classical illustration of this is given by Bjarne Stroustrup the creator of C in the following example Ralph McArdell 14 lyutogo 2004 http en allexperts com All Experts Arhiv originalu za 10 sichnya 2010 Procitovano 8 bereznya 2010