Hvad er en virtuel klasse?
En virtuel klasse er en klasse, der kun tildeles en gang i hukommelsen, således at børn i denne klasse kun bruger den ene kopi af den forældreklasse, der er etableret i hukommelsen. En klasse er en gruppe af objekter, der deler fælles træk eller attributter. At gøre en virtuel klasse giver objektorienterede programmeringssprog mulighed for at bruge flere arv, når anden eller flere generation af forældreklasser stammer fra almindelige forfædres baseklasser. Afhængigt af det henviste computerprogrammeringssprog bruges det "virtuelle" nøgleord, lignende nøgleord eller syntaks og semantik i en klasse til at antyde, at en bestemt klasse skal betragtes som virtuel.
Ikke alle objektorienterede programmeringssprog giver flere arv, hvilket er, når et barnklasse kan udledes fra flere parentklasser på samme tid. På et programmeringssprog som C ++ kan en klasse arve alle medlemsdata og medlemsfunktioner fra begge forældreklasser på én gang og have adgang til begge par af parENT data og funktioner. Andre sprog, der understøtter flere arv, inkluderer Perl, Python, TCL og Eiffel.
Der opstår et problem i flere arvshierarkier, når to eller flere forældres klasser, der bruges til at oprette en barneklasse, oprindeligt er afledt af kun en eller den samme bedsteforældre. Dette kaldes diamantproblemet, navnet stammer fra, hvordan hierarkiet ville se ud i denne situation. Når et kompilatorprogram forsøger at instantiere en klasse, såsom en barnebarn -klasse lavet af to forældreklasser med en fælles bedsteforælder, er to eksemplarer af bedsteforælderen lavet i hukommelsen, en for hver forælder.
På grund af tvetydigheden forårsaget af flere kopier af den samme bedsteforælder i hukommelsen, er kompilatoren ikke i stand til at konstatere, hvilken kopi af bedsteforælderen børnebarnet skal bruge til at få adgang til bedsteforældre data eller funktioner. At afhjælpe denne situation, i C ++ er bedsteforælderen gjort til en dydual klasse, når man erklærer forældrene. Dette får kompilatoren til kun at lave en kopi af bedsteforælderen i hukommelsen, som begge forældre deler. Når bedsteforælderen er blevet en virtuel klasse, har kompilatoren ikke noget problem med at beslutte, hvordan barnebarnet skal få adgang til bedsteforælderen, fordi der kun er en kopi af bedsteforælderen.
Der skal udvises stor omhu, når der strukturerer klassehierarkier, især når de vil blive inkluderet i eller blive basen for meget større hierarkier i fremtiden. Den rette anvendelse af en virtuel klasse giver klassehierarkier større breddegrad i udvikling; De har dog potentialet til at forårsage fejl, der er vanskelige at finde. Undersøgelsen af faste computerprogrammeringstekniske principper vil hjælpe med at sikre, at uventede bivirkninger fra forkert programorganisation ikke forekommer.