Een kopie constructor is een speciale lid functie binnen een klasse . Het accepteert een verwijzing naar een bestaand object van dezelfde klasse type en maakt een diepe kopie van dat object . Een diepe kopie niet alleen kopieert alle lid terreinen maar ook kopieert elke dynamisch toegewezen geheugen . C + + compilers doen kopie constructie automatisch . U moet een kopie constructor te definiëren wanneer uw klas gaat dynamisch geheugen . Wat je nodig hebt Intermediair C + + kennis C + + compiler , zoals Visual Studio 2008 Toon Meer Aanwijzingen Beoordeling 1 wanneer u een kopie constructor bellen . Er zijn drie situaties : . Bij het maken van een object uit een bestaand object van hetzelfde type , wanneer u een object langs waarde aan een functie en als een functie van een object retourneert kopen van 2 Weet wanneer je C + + klasse moet een kopie constructor . Komt het neer op dit. Als uw klasse heeft pointers en het presteert dynamisch toewijzen van geheugen , dan moet je het eens een expliciete kopie constructeur . Kijk 3 naar een voorbeeld waar je niet hoeft te een constructor te definiëren voor een C + + -klasse . Klasse X heeft alleen stapelen variabelen en geen pointers . Een oppervlakkige kopie volstaat om de waarden van een bestaand object in nieuw object kopieert . De compiler kan dit automatisch doen , zodat je niet hoeft te een kopie constructor te definiëren voor klasse X : class X { int num ; publiek : X ( ) : num ( 0 ) { } ~ X ( ) ; } ; Studie 4 een voorbeeld dat een expliciete copy - constructor definitie vereist . Zoals u kunt zien , de grootte van de string , N , is geen hard-coded waarde, maar wordt bepaald door de gebruiker . Naar B te maken van A zoals in de uitdrukking " ZB ( A ) , " je moet de compiler vertellen hoeveel geheugen toe te wijzen voor B. De plaats om dit te doen is in de kopie constructor , als volgt : klasse Z { int N ; char * str ; publiek : Z ( int n ) : N ( n ) { str = new char [ N ] ; } Z ( Z & andere ) { str = new char [ other.GetLen ( ) ] ; Twitter //kopiëren van gegevens van de str van " andere " aan de str van "dit" } < br > ~ Z ( ) { delete [ ] str ; } int GetLen ( ) const { return N ; } } ; < br >
|