En
un apartado anterior se ha visto una declaración de un objeto
en la forma:
C_Cuenta
c2 = c1;
Esta
sentencia es completamente diferente de una simple sentencia
de asignación entre dos objetos previamente creados,
tal como la siguiente:
c2
= c1;
En
este último caso no se llama a ningún constructor,
porque se supone que c1 y c2 existían
previamente. En este segundo caso se utiliza el operador
de asignación (=) estándar de C y C++, que
permite realizar asignaciones entre objetos de estructuras o clases.
Este operador realiza una asignación bit a bit de
los valores de las variables miembro de c1 en c2.
En este sentido es similar al constructor de copia
y, por las mismas razones que éste, da lugar también
a errores o resultados incorrectos.
La
solución en este caso es redefinir o sobrecargar el
operador de asignación (=) de modo que vaya más
allá de la copia bit a bit y se comporte adecuadamente.
En el apartado anterior se ha explicado a fondo el origen y la solución
de este problema, común al constructor de copia
y al operador de asignación (=). Básicamente,
el operador de asignación sobrecargado (=)
debe de llegar a una situación como la que se muestra en
la figura 3.
|