Video: Hvorfor trenger kroppen vann? 2024
Konstruktøren er en spesiell funksjon som C ++ påkaller automatisk når et objekt er opprettet for å la objektet initialisere seg selv. Det er to spesielle variasjoner av konstruktøren kjent som kopi og flyttekonstruksjonene.
En kopi-konstruktør er konstruktøren som C ++ bruker til å lage kopier av objekter. Den bærer navnet X:: X (const X &), hvor X er navnet på klassen. Det vil si, det er konstruktøren i klassen X, som tar argument som en referanse til et objekt av klasse X . Dette høres veldig ubrukelig, men bare ta et minutt å utforske hvorfor C ++ trenger slike beasties.
Tenk et øyeblikk om hva som skjer når du ringer en funksjon som følgende:
void fn (Student fs) {// … samme scenario; forskjellig argument …} int main (int argcs, char * pArgs []) {Student ms; fn (ms); returnerer 0;}
I samtalen til fn () overfører C ++ en kopi av objektet ms og ikke selve objektet.
Nå vurder hva det betyr å lage en kopi av et objekt. Først tar det en konstruktør å lage et objekt, til og med en kopi av en eksisterende gjenstand. C + + kan lage en standard kopikonstruksjon som kopierer eksisterende objekt til det nye objektet en byte om gangen.
Det er hva eldre språk som C gjør. Men hva om klassen ikke vil ha en enkel kopi av objektet? Hva om noe annet er nødvendig? (Ignorer "hvorfor?" For en liten stund.) Klassen må kunne spesifisere nøyaktig hvordan kopien skal opprettes.
Således bruker C ++ en kopikonstruksjon i foregående eksempel for å lage en kopi av objektet ms på stakken under funksjonskallet fn (). Denne spesielle kopikonstruktøren ville være Student:: Student (Student &) - si det tre ganger raskt.