Skip to main content

Wat is virtuele erfenis?

Virtuele erfenis is een soort overerving waarin de implementatie van een superclass onvolledig is en een subklasse vereist is voor volledige definitie van een object.Dit type overerving kan worden gebruikt in combinatie met zowel enkele als meerdere overerving, maar wordt meestal gebruikt in meerdere overerving.Elke klasse die van een virtuele basisklasse erft, wordt een directe subklasse van die basisklasse.Een virtuele basisklasse kan op een subklasse vertrouwen om al zijn methoden te implementeren, maar dit is geen vereiste.

C ++ is de meest bekende computertaal om virtuele erfenis te gebruiken.Om virtuele erfenis in C ++ te verklaren, wordt het virtuele trefwoord gebruikt.Zowel de superclass als de subklasse moeten virtuele methoden verklaren met het virtuele trefwoord.Dit vertelt de C ++ compiler dat de superclass onvolledig is en dat het informatie van de subklasse moet krijgen om deze te voltooien.Het gebruik van de subklasse om de superclass te voltooien betekent niet dat subklassen elkaar overschrijven als ze dezelfde basisklasse hebben, en in plaats daarvan zorgt de C ++ compiler voor om te bepalen welke stukken bij elk object gaan.

omdat een virtuele basisklasse vereist is voor virtueelOvererving, globale functies in C ++ kunnen niet virtueel worden verklaard.Dit erfenistype kan alleen worden gebruikt bij het hechten aan de principes van objectgeoriënteerde programmering (OOP).De reden hiervoor is dat globale functies niet worden geassocieerd met een bepaalde klasse, en dus meestal alleen op zichzelf staan.Zonder een superclass en subklasse overerving kan niet gebeuren, zijn globale functies en virtuele erfenis elkaar uitsluiten.Globale functies kunnen in theorie worden gebruikt in virtuele functies, maar het omgekeerde werkt misschien niet altijd.

Virtuele overerving wordt gebruikt om veel programmeerproblemen op te lossen, en een van de meest bruikbare is de oplossing van ambiguïteit.In meervoudige overerving kan men een basisklasse A hebben met twee subklassen, B en C, en vervolgens een klasse D die erft van zowel klassen B als C. Dit patroon wordt gewoonlijk de diamant van de dood genoemd omdat als klassen a, b,en C hebben allemaal implementaties van dezelfde methode, het is niet mogelijk voor klasse D om te bepalen welke implementatie het moet gebruiken.Virtuele overerving lost dit probleem op omdat elke implementatie van klassen duidelijk en daarom ondubbelzinnig blijft.Dit onderscheid wordt afgehandeld door gespecialiseerde interne objecten genaamd virtuele tabellen (VTABLE) die elk objecttype bijhouden, maar deze tabellen hoeven niet expliciet te worden gemanipuleerd door een programmeur omdat ze in de taal zijn ingebouwd.