Skip to main content

Vad är en virtuell klass?

En virtuell klass är en klass som endast tilldelas en gång i minnet, så att barn i den klassen endast använder en kopia av den överordnade klassen som är etablerad i minnet.En klass är en grupp föremål som delar gemensamma egenskaper eller attribut.Att göra en klass virtuell ger objektorienterade programmeringsspråk förmågan att använda flera arv när andra eller fler generationens förälderklasser härstammar från vanliga förfäderbasklasser.Beroende på datorprogrammeringsspråket används det virtuella nyckelordet, liknande nyckelord eller syntax och semantik i en klass för att antyda att en viss klass ska betraktas som virtuell.

Inte alla objektorienterade programmeringsspråk tillåter flera arv, vilketär när en barnklass kan härledas från flera förälderklasser samtidigt.På ett programmeringsspråk som C ++ kan en klass ärva alla medlemsdata och medlemsfunktioner från båda överordnade klasser på en gång och har tillgång till både uppsättningar av förälderdata och funktioner.Andra språk som stöder flera arv inkluderar Perl, Python, TCL och Eiffel.

Ett problem uppstår i flera arvshierarkier när två eller flera föräldrakurser som används för att skapa en barnklass härstammar från endast en eller samma morföräldrar.Detta kallas diamantproblemet, namnet som härrör från hur hierarkin skulle se ut i denna situation.När ett kompilatorprogram försöker instansera en klass, till exempel en barnbarnsklass gjord av två förälderklasser med en gemensam morförälder, tillverkas två kopior av morförälderna i minnet, en för varje förälder.

På grund av tvetydigheten orsakad av flera kopior av samma morförälder i minnet kan kompilatorn inte fastställa vilken kopia av morföräldrar som barnbarnet ska använda för att få åtkomst till morföräldrar eller funktioner.För att avhjälpa denna situation görs i C ++ morförälder till en virtuell klass när de förklarar föräldrarna.Detta får kompilatorn att bara göra en kopia av morförälderna i minnet som båda föräldrarna delar.När morföräldern har blivit en virtuell klass har kompilatorn inga problem att bestämma hur barnbarnet ska komma åt morföräldern eftersom det bara finns en kopia av morförälderna.

Stor omsorg bör vidtas när man strukturerar klasshierarkier, särskilt när de kommer att inkluderasi eller bli basen för mycket större hierarkier i framtiden.Rätt användning av en virtuell klass ger klasshierarkier större latitud i utvecklingen;De har emellertid potential att orsaka fel som är svåra att hitta.Studien av solida datorprogrammeringstekniska principer hjälper till att säkerställa att oväntade biverkningar från felaktig programorganisation inte inträffar.