Skip to main content

Mi a virtuális öröklés?

A virtuális öröklés egy olyan örökség, amelyben a szuperosztály végrehajtása hiányos, és egy objektum teljes meghatározásához alosztály szükséges.Az ilyen típusú öröklés felhasználható mind az egyszeri, mind a többszörös örökséggel együtt, de leggyakrabban a többszörös örökségben használják.Bármely olyan osztály, amely a virtuális alaposztályból örököl, az alaposztály közvetlen alosztályává válik.A virtuális bázisosztály az alosztályra támaszkodhat az összes módszer megvalósításához, de ez nem követelmény. A

C ++ a legismertebb számítógépes nyelv a virtuális öröklés használatához.A virtuális öröklés deklarálásához a C ++ -on a virtuális kulcsszó használható.Mind a szuperosztálynak, mind az alosztálynak virtuális módszereket kell deklarálnia a virtuális kulcsszóval.Ez azt mondja a C ++ fordítónak, hogy a szuperosztály hiányos, és az alosztályból információt kell szereznie annak befejezéséhez.Az alosztály használata a szuperosztály befejezéséhez nem azt jelenti, hogy az alosztályok felülírják egymást, ha ugyanazzal az alaposztályuk van, és ehelyett a C ++ fordító gondoskodik arról, hogy meghatározzák, hogy mely darabok mennek az egyes objektumokkal.Az öröklés, a C ++ globális funkciói nem deklarálhatók virtuálisnak.Ez az öröklési típus csak az objektum-orientált programozási (OOP) alapelvek betartásakor használható.Ennek oka az, hogy a globális funkciók nem kapcsolódnak egy adott osztályhoz, ezért általában önmagukban vannak önállóak.A szuperosztály és az alosztály öröklés nélkül nem fordulhat elő, tehát a globális funkciók és a virtuális öröklés kölcsönösen kizárják őket.A globális funkciók elméletileg a virtuális funkciókon belül használhatók, de a fordított nem mindig működik.Több örökségben lehet, hogy az egyiknek van egy A osztálya, amelynek két alosztálya van, B és C, majd egy D osztály, amely mindkét B és C osztályból örököli ezt a mintát, ezt a mintát általában a halál gyémántjának nevezik, mert ha A, B osztályok, ha az A, B osztályok,és c mindegyiknek ugyanaz a módszere van, a D osztály nem lehetséges, hogy meghatározza, melyik megvalósítást kell használni.A virtuális öröklés megoldja ezt a problémát, mivel az egyes osztályok végrehajtása továbbra is különbözik egymástól, és ezért egyértelmű.Ezt a megkülönböztetést olyan speciális belső objektumok kezelik, amelyeket virtuális táblázatoknak (VTables) hívnak, amelyek nyomon követik az egyes objektumtípusokat, de ezeket a táblázatokat nem kell kifejezetten manipulálni egy programozónak, mert beépítik a nyelvbe.