Yshopnoosa.com

Vad är en virtuell Destructor i C?

Eftersom C++ använder en objektorienterad programmering eller OOP modell, som en del av dess design, måste programmerare bekanta sig med vissa OOP begrepp som klasser och objekt. När en programmerare vill utveckla ett objekt för användning i koden, måste hon designa objektets funktioner i en "klass". En klass definierar data och funktioner som ett objekt kan använda. En viss typ av objekt funktion, den virtuella destructor, för dess användning kräver att en programmerare förstå rollen som destruktorer i klasser, begreppet klassarv och användningen av virtuella funktioner i C++ programmering.

Arv

En styrka av OOP ligger i begreppet arv. När en programmerare vill utvidga den funktionellt i ett objekt, eller om ett objekt delar mycket av den funktionellt av ett annat objekt med endast mindre skillnader, programmeraren kan härleda en klass från en annan. När en klass härrör från en annan klass (klassen "bas"), har tillgång till variabler och funktionerna som definierats i första klass. I det här exemplet klassen "boll" härrör från klass "sphere" och utökar sin funktionalitet.

klass sfär {

offentlig:

int getRadius() {

återvända r;

}

int r;

}

Undergrupp boll: offentlig sfär {

offentlig:

sträng färg;

}

Virtuella funktioner

Eftersom en härledd klass har tillgång till alla funktioner i basklassen, kan det använda dem som helst som om det fungerar som basklass. Emellertid kan den härledda klassen istället ändra en funktion i basklassen efter dess behov. En basklass kan dessutom fungera som en mall för härledd klass. I det här fallet basklassen kommer namn funktioner utan att definiera vad de gör, i stället lämnar det till härledda klasser. En funktion i en basklass som gör ingenting, i stället lämnar en härledd klass för att genomföra det, kallas en "virtuell" funktion.

Destruktorer

Integrerad del av objektet design är genomförandet av "constructor" och "destructor" funktioner. En konstruktorfunktion för en klass som definierar hur ett objekt skapas från klassen först kommer att initiera sig (vad standarddatavärden det innehåller, till exempel). Destructor, däremot bestämmer vad som händer när ett objekt tas bort från minnet (hur informationen i det tas bort, till exempel). Denna exempelkod visar hur en klass först definierar konstruktören och destructor funktioner.

klass sfär {

Sphere(); konstruktören

~ Sphere(); Destructor

}

Virtuella destruktorer

På grund av hur klasser och destruktorer fungerar, måste när en härledd klass raderas från minnet, både destructor av härledda klassen och destructor av basklassen anropas. För att åstadkomma detta, programmerare skapa virtuella destruktorer i basklasser, att härledda klasser kan definiera. Detta exempel visar en basklass med en virtuella destructor och en härledd klass med sin egen destructor.

klass sfär {

Sphere();

virtuella ~ Sphere() {}; nyckelordet "virtuella" betecknar ett virtuellt klass

}

Undergrupp boll: offentlig sfär {

Ball();

~ Ball(): / / ta bort en "boll" objekt kommer att kalla denna destructor och sfär destructor