Skip to main content

Hva er en virtuell klasse?

En virtuell klasse er en klasse som bare tildeles en gang i minnet, slik at barn i den klassen bare bruker den ene kopien av den foreldreklassen som er etablert i minnet.En klasse er en gruppe objekter som deler vanlige egenskaper eller attributter.Å lage en virtuell klasse gir objektorienterte programmeringsspråk muligheten til å bruke flere arv når andre eller flere generasjons foreldreklasser er avledet fra vanlige forfedres baseklasser.Avhengig av dataprogrammeringsspråket som er referert til, brukes det virtuelle nøkkelordet, lignende søkeord eller syntaks og semantikk i en klasse til å antyde at en bestemt klasse skal betraktes som virtuell.

Ikke alle objektorienterte programmeringsspråk tillater flere arv, som somer når en barneklasse kan avledes fra flere foreldreklasser samtidig.På et programmeringsspråk som C ++ kan en klasse arve alle medlemsdata og medlemsfunksjoner fra begge foreldreklasser samtidig og ha tilgang til begge sett med overordnet data og funksjoner.Andre språk som støtter flere arv inkluderer Perl, Python, TCL og Eiffel.

Et problem oppstår i flere arvehierarkier når to eller flere foreldreklasser som ble brukt til å lage en barneklasse opprinnelig er avledet fra bare en eller samme besteforeldreklasse.Dette kalles diamantproblemet, navnet som stammer fra hvordan hierarkiet ville se ut i denne situasjonen.Når et kompilatorprogram prøver å instantisere en klasse, for eksempel en barnebarnsklasse laget av to foreldreklasser med en felles besteforeldre, er to eksemplarer av besteforeldre laget i minnet, en for hver av foreldrene.

På grunn av tvetydigheten forårsaket av flere kopier av samme besteforelder i minnet, er kompilatoren ikke i stand til å finne ut hvilken kopi av besteforeldrene barnebarnet skal bruke for å få tilgang til besteforeldre data eller funksjoner.For å avhjelpe denne situasjonen, i C ++, blir besteforelderen gjort til en virtuell klasse når de erklærer foreldrene.Dette fører til at kompilatoren bare lager en kopi av besteforeldrene i minnet som begge foreldrene deler.Når besteforelderen har blitt en virtuell klasse, har kompilatoren ingen problemer med å avgjøre hvordan barnebarnet skal få tilgang til besteforeldrene fordi det bare er en kopi av besteforeldre.

stor forsiktighet bør tas når de strukturerer klassehierarkier, spesielt når de vil bli inkluderti eller bli basen for mye større hierarkier i fremtiden.Riktig utnyttelse av en virtuell klasse gir klassehierarkier større breddegrad i utviklingen;Imidlertid har de potensial til å forårsake feil som er vanskelige å finne.Studien av solide dataprogrammeringstekniske prinsipper vil bidra til å sikre at uventede bivirkninger fra feil programorganisasjon ikke oppstår.