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 som tillåter flera arv, vilket är när en barnklass kan härledas från flera överordningar på samma tid. 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åda uppsättningarna av PARENT -data 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äldraklasser brukade 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 dirvual klass när du 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 försiktighet bör vidtas när man strukturerar klasshierarkier, särskilt när de kommer att inkluderas i eller bli bas 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.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?