Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come utilizzare costruttori di copia in C + +

Un costruttore di copia è una funzione membro speciale all'interno di una classe . Si accetta un riferimento a un oggetto esistente dello stesso tipo di classe e fa una copia completa di tale oggetto . Una copia profonda copia non soltanto tutti i campi membro , ma anche copia qualsiasi memoria allocata dinamicamente . Compilatori C + + automaticamente fare copia costruzione . È necessario definire un costruttore di copia quando la classe coinvolge memoria dinamica . Cose che ti serviranno
Intermedio C + + Commercio conoscenza compilatore C + + , come Visual Studio 2008
Mostra più istruzioni
1

recensione quando chiamare un costruttore di copia . Ci sono tre situazioni : . Durante la creazione di un oggetto da un oggetto esistente dello stesso tipo , quando si passa un oggetto di valore ad una funzione e quando una funzione restituisce un oggetto
2

sapere quando il C + + classe ha bisogno di un costruttore di copia . Si riduce a questo . Se la classe ha puntatori e svolge allocazione dinamica della memoria , allora si deve dare una copia costruttore esplicito .
3

Guarda un esempio in cui non si dispone di definire un costruttore per una classe C + + . Classe X è impilare solo variabili e non puntatori . Una copia superficiale è sufficiente per copiare i valori di un oggetto esistente in un nuovo oggetto . Il compilatore può farlo automaticamente , quindi non è necessario definire un costruttore di copia per la classe X :
class X {
int num ;
pubblico :
X ( ) : num ( 0 ) { }
~ X (); }
;
4

studio un esempio che richiede una definizione di costruttore di copia esplicita. Come si può vedere , la dimensione della stringa , N , non è un valore hard- coded ma è determinata dall'utente . Per creare B da A , come nell'espressione " ZB ( A) , " è necessario indicare al compilatore la quantità di memoria da allocare per la B. Il luogo per farlo è nel costruttore di copia , come segue :
classe Z {
int N;
char * str ;
pubblico :
Z ( int n ) : N ( n) {
str = new char [ N] ;
}
Z ( Z & altro ) {
str = new char [ other.GetLen ( ) ] ;
//copiare i dati dalla str di "altro " per la str di "questo "
}
~ Z ( ) {
delete [ ] str ;
}
int GetLen ( ) const {
ritorno N;

} } ;


 

Programmazione © www.354353.com