Hvad er en virtuel klasse?

En virtuel klasse er en klasse, der kun tildeles én gang i hukommelsen, således at børn i den 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 muligheden for at bruge flere arv, når anden eller flere generation af overordnede klasser er afledt fra almindelige forfædres baseklasser. Afhængigt af det refererede 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, hvilket er, når en underordnet klasse kan udledes fra flere forældreklasser på samme tid. I et programmeringssprog som C ++ kan en klasse arve alle medlemsdataene og medlemsfunktionerne fra begge overordnede klasser på en gang og have adgang til begge sæt forældredata og funktioner. Andre sprog, der understøtter flere arv, inkluderer Perl, Python, Tcl og Eiffel.

Et problem opstår i flere arvehierarkier, når to eller flere forældreklasser, der bruges til at oprette en barneklasse, oprindeligt kun stammer fra en eller samme bedsteforældreklasse. Dette kaldes diamantproblemet, navnet stammer fra, hvordan hierarkiet ville se ud i denne situation. Når et compiler-program forsøger at instantisere en klasse, såsom en barnebarnsklasse lavet af to forældreklasser med en fælles bedsteforælder, laves to kopier af bedsteforælderen i hukommelsen, en til hver forælder.

På grund af den tvetydighed, der er forårsaget af flere kopier af samme bedsteforælder i hukommelsen, er kompilatoren ikke i stand til at fastslå, hvilken kopi af bedsteforældre barnebarnet skal bruge til at få adgang til bedsteforældres data eller funktioner. For at afhjælpe denne situation gøres bedsteforældre i C ++ 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 compileren 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 ved strukturering af klassehierarkier, især når de vil blive inkluderet i eller blive basen for langt større hierarkier i fremtiden. Korrekt anvendelse af en virtuel klasse giver klassehierarkier større bredde i udvikling; de har dog potentialet til at forårsage fejl, der er vanskelige at lokalisere. Undersøgelsen af ​​solide computerprogrammeringstekniske principper vil hjælpe med til at sikre, at uventede bivirkninger fra forkert programorganisation ikke forekommer.

ANDRE SPROG

Hjalp denne artikel dig? tak for tilbagemeldingen tak for tilbagemeldingen

Hvordan kan vi hjælpe? Hvordan kan vi hjælpe?