Skip to main content

Hvad er en virtuel klasse?

En virtuel klasse er en klasse, der kun er tildelt 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 tillader flere arv, somer, når en barneklasse kan afledes fra flere forældreklasser på samme tid.På et programmeringssprog som C ++ kan en klasse arve alle medlemsdata og medlemsfunktioner fra begge forældreklasser på én gang og har adgang til både sæt af overordnede 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 børneskasse, oprindeligt stammer fra 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.For at afhjælpe denne situation er bedsteforælderen i C ++ gjort til en virtuel klasse, når de 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 tages stor omhu, når man strukturerer klassehierarkier, især når de vil være inkludereti 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.