¿Cómo saber si se ejecuta el código en el operador de asignación sobrecargado?

Tengo el siguiente código:

class Sales_item {
     public:
     int ii;
         Sales_item& operator=(const Sales_item &item)
     {
        cout << "Inside assignment\n"; // Line 1
        ii = item.ii;
        return *this; // Line 2
     }
};

Luego, hice: (solo un ejemplo)

Sales_item s;
Sales_item s1 = s;

Pero el Line 1 no ejecutó. ¿Cómo puedo "ver" el código dentro de la asignación sobrecargada para que se ejecute? Por ejemplo, puede haber un código complicado y quiero depurarlo. Intenté establecer un punto de interrupción en la Línea 1, pero el programa no saltó a ese punto de interrupción.

Por qué Line 2 devoluciones *this? He intentado cambiar a void y obtuvo los mismos resultados. ¿Cual es la diferencia?

preguntado el 03 de mayo de 12 a las 14:05

2 Respuestas

Estas inicializando s1, sin asignarle.

Sales_item s1 = s;

llama al compilador generado constructor de copias. Es equivalente a:

Sales_item s1(s);

Es necesario:

Sales_item s1;
s1 = s;

Por qué Line 2 devoluciones *this? - Esa es la forma idiomática de implementar el operador de asignación, y le sugiero que se ciña a ella. Facilita el encadenamiento de métodos y operaciones.

contestado el 03 de mayo de 12 a las 14:05

Con respecto a la pregunta 2: devuelve *this para habilitar asignaciones encadenadas como s1 = s2 = s3 = ...

contestado el 03 de mayo de 12 a las 14:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.