Video: Curious Beginnings | Critical Role | Campaign 2, Episode 1 2024
Konstruktorn är en speciell funktion som C ++ påstår automatiskt när ett objekt skapas för att objektet ska kunna initieras. Det finns två specifika variationer av konstruktören känd som kopia och rörelsekonstruktioner.
En kopiekonstruktör är konstruktören som C ++ använder för att göra kopior av objekt. Den bär namnet X:: X (const X &), där X är klassens namn. Det vill säga, det är konstruktören i klassen X, som betraktar en hänvisning till ett objekt av klassen X . Det här låter väldigt värdelöst, men bara ta en minut för att utforska varför C ++ behöver sådana beasties.
Tänk på ett ögonblick om vad som händer när du ringer en funktion som följande:
void fn (Student fs) {// … samma scenario; olika argument …} int main (int argcs, char * pArgs []) {Student ms; fn (ms); returnera 0;}
I samtalet till fn () överför C ++ en kopia av objektet ms och inte själva objektet.
Överväg nu vad det innebär att skapa en kopia av ett objekt. För det första tar det en konstruktör att skapa ett objekt, till och med en kopia av ett befintligt objekt. C ++ kan skapa en standardkopieringskonstruktör som kopierar det befintliga objektet till det nya objektet en byte åt gången.
Det är vad äldre språk som C gör. Men vad händer om klassen inte vill ha en enkel kopia av objektet? Vad händer om något annat krävs? (Ignorera "varför?" Ett tag.) Klassen måste kunna exakt ange hur kopian ska skapas.
Således använder C ++ en kopiekonstruktor i föregående exempel för att skapa en kopia av objektet ms på stapeln under funktionskallet fn (). Denna speciella koparkonstruktör skulle vara Student:: Student (Student &) - säg det tre gånger snabbt.