Video: Leasefiets: waarom je het wel of niet moet willen 2024
De constructor is een speciale functie die C ++ automatisch oproept wanneer een object wordt gemaakt om het object zichzelf te laten initialiseren. Er zijn twee specifieke variaties van de constructor bekend als de kopie en verplaatsingsconstructors.
Een copy-constructor is de constructor die C ++ gebruikt om kopieën van objecten te maken. Het draagt de naam X:: X (const X &), waarbij X de naam van de klasse is. Dat wil zeggen, het is de constructor van klasse X, die als argument een verwijzing naar een object van klasse X gebruikt. Dit klinkt echt nutteloos, maar neem even de tijd om te onderzoeken waarom C ++ dergelijke beesten nodig heeft.
Denk even na over wat er gebeurt als je een functie zoals de volgende roept:
void fn (Student fs) {// … zelfde scenario; ander argument …} int main (int argcs, char * pArgs []) {Student ms; fn (ms); return 0;}
In de aanroep naar fn () geeft C ++ een kopie van het object ms door en niet het object zelf.
Overweeg nu wat het betekent om een kopie van een object te maken. Ten eerste is er een constructor nodig om een object te maken, zelfs een kopie van een bestaand object. C ++ kan een standaard-kopieconstructor maken die het bestaande object één byte per keer in het nieuwe object kopieert.
Dat is wat oudere talen, zoals C, doen. Maar wat als de klas geen eenvoudige kopie van het object wil? Wat als er iets anders nodig is? (Negeer het "waarom?" Voor een korte tijd.) De klas moet in staat zijn om precies aan te geven hoe de kopie moet worden gemaakt.
Zo gebruikt C ++ een kopieconstructor in het voorgaande voorbeeld om tijdens het aanroepen van functie fn () een kopie van het object ms op de stapel te maken. Deze specifieke kopie-constructor zou zijn Student:: Student (Student &) - zeg dat driemaal snel.