Compartir a través de


Copiar objetos de clase

La operación de asignación y la operación de inicialización de los objetos que se copiarán.

  • Asignación: Cuando el valor del objeto se asigna a otro objeto, el primer objeto se copia en el segundo objeto.Por lo tanto,

    Point a, b;
    ...
    a = b;
    

    hace que el valor b se copie en a.

  • Inicialización: La inicialización se produce cuando se declara un nuevo objeto, cuando los argumentos se pasan a las funciones por valor, o cuando los valores se devuelven de funciones por valor.

Puede definir la semántica de “copy” para los objetos de tipo de clase.Por ejemplo, considere este código:

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

El código anterior podría significar la “copia el contenido de FILE1.DAT a FILE2.DAT” o a ella podría significar que “ignore FILE2.DAT y que cree b un segundo identificador a FILE1.DAT.” Debe asociar la semántica que copia correspondiente a cada clase, como sigue.

  • Mediante el operador de asignación operator= así como una referencia al tipo de clase como tipo de valor devuelto y el parámetro que se pasa por const referencia- para el ejemplo ClassName& operator=(const ClassName& x);.

  • Utilizando el constructor de copia.Para obtener más información sobre el constructor de copias, vea Reglas para declarar Constructores.

Si no se declara un constructor de copias, el compilador genera un constructor miembro- mejor de copia automáticamente. Si no se declara un operador de asignación de copia, el compilador genera un operador de asignación miembro- mejor de copia automáticamente. Declarar un constructor de copias no suprime el operador de asignación compilador- generado de copia, ni viceversa.Si implementa cualquiera, es recomendable que también implemente el otro de modo que el significado de código esté claro.

La asignación Miembro- sabia se explica con más detalle en Asignación y inicialización de a miembro.

El constructor de copias toma un argumento nombre de clasetipo**&**, donde es el nombre nombre de clase de la clase para la que se define el constructor.Por ejemplo:

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}

[!NOTA]

Haga el tipo de argumento nombre de clase const& constructor de copia siempre que sea posible.Esto evita que el constructor de copias cambie accidentalmente el objeto de que se está copiando.También permite copiar objetos const .

Vea también

Referencia

El miembro especial funciona (C++)