A constructor de copia es una función miembro especial dentro de una clase . Se acepta una referencia a un objeto existente del mismo tipo de clase y hace una copia en profundidad de ese objeto . Una copia en profundidad no sólo copia todos los campos miembros , sino también copia la memoria asignada dinámicamente. C + + compiladores construcción copia automáticamente. Es necesario definir un constructor de copia cuando la clase implica memoria dinámica. Cosas que necesitará
Intermedio C + + conocimiento
compilador C + + , como Visual Studio 2008
Ver Más instrucciones
1
revisión cuándo llamar a un constructor de copia . Hay tres situaciones: . Cuando se crea un objeto a partir de un objeto existente del mismo tipo , cuando se pasa un objeto por valor a una función y cuando una función devuelve un objeto
2
sabe cuando su C + + clase tiene un constructor de copia . Todo se reduce a esto . Si su clase tiene punteros y realiza la asignación de memoria dinámica, entonces usted debe darle un constructor de copia explícito.
3
Mira un ejemplo en el que no tiene que definir un constructor para una clase C + + . Clase X sólo ha apilar variables y no hay punteros . Una copia superficial es suficiente para copiar los valores de un objeto existente a un nuevo objeto . El compilador puede hacer esto automáticamente, así que no tienes que definir un constructor de copia para la clase X :
class X {
int num;
público :
X () : num ( 0 ) { } IMVU: ~ X (); }
;
4
Estudio de un ejemplo que requiere una definición constructor copia explícito. Como se puede ver, el tamaño de la cadena , N, no es un valor codificado sino que se determina por el usuario. Para crear B de A como en la expresión " ZB ( A) , " hay que indicar al compilador cuánta memoria asignar a B. El lugar para hacerlo es en el constructor de copia , de la siguiente manera :
clase Z {
int N;
char * str ;
público :
Z (int n) : N (n ) {
str = new char [ N] ;
}
Z ( Z & otros ) {
str = new char [ other.GetLen ()] ;
/data /copia del str del "otro" en el str de "esto"
}
~ Z ( ) {
delete [ ] str ;
}
int Getlen ( ) const {
regreso N;
} } ;