Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako používať kopírovacie konštruktory v C + +

kópia konštruktor je špeciálna členom funkcie vnútri triedy . Prijíma odkaz na existujúci objekt rovnakého typu triedy a robí hlbokú kópiu tohto objektu . Hlboká kópie nielen kopíruje všetky členské poľa , ale tiež kópia jedného dynamicky alokovanej pamäte . C + + kompilátory si skopírujte konštrukciu automaticky . Musíte definovať konštruktor kópie , keď vaša trieda zahŕňa dynamickej pamäte . Veci , ktoré budete potrebovať
Intermediate C + + znalosť
C + + kompilátora , ako je Visual Studio 2008
Zobraziť ďalšie inštrukcie Cestuj 1

recenziu , kedy volať kopírovacie konštruktor . Existujú tri situácie : . Pri vytváraní objektu zo existujúci objekt rovnakého typu , keď predáte objekt hodnotou na funkciu a ak je funkcia vracia objekt
2

Vedieť , kedy vaše C + + trieda potrebuje kopírovací konštruktor . To sa scvrkáva na to . Ak vaša trieda má ukazovatele a vykoná dynamického prideľovania pamäte , potom musíte dať explicitné kopírovacie konštruktor .
3

Pozrite sa na príklad , kde nemusíte definovať konštruktor C + + triedy . Trieda X má len zásobník premenné a žiadne odkazy . Plytkej kópie je dostačujúca skopírovať hodnoty z existujúceho objektu do nového objektu . Kompilátor môže to urobiť automaticky , takže nemusíte definovať konštruktor kópie pre triedu X :
triedy X {
int num ;
verejnosť :
X ( ) : num ( 0 ) { }
~ X ( ) ; }
,
4

Preštudujte príklad , ktorý si vyžaduje jednoznačnú špecifikáciu copy - konštruktory . Ako môžete vidieť , veľkosť reťazca , N , nie je pevne hodnotu , ale je určená pre užívateľov . Ak chcete vytvoriť B od A ako vo výraze " ZB ( A ) , " musíte povedať kompilátora , koľko pamäte prideliť pre B. miesto , ako to urobiť , je kopírovanie konstruktoru , takto :
trieda Z {
int N ;
char * str ,
verejnosť :
Z ( int n) : N ( n) {
str = new char [ N ] ;
}
z ( z & iné ) {
str = new char [ other.GetLen ( ) ] ;
//kopírovať dáta zo str " iný " na str " to "
}
~ Z ( ) {
delete [ ] str ;
}
int GetLen ( ) const {
návrat N ;
}
} ;


Najnovšie články