Tarea

El operador de asignación (=) es, en rigor, un operador binario. La declaración es idéntica a cualquier otro operador binario, con las excepciones siguientes:

  • Debe ser una función miembro no estática. Ninguna función operator= se puede declarar como función no miembro.
  • Las clases derivadas no lo heredan.
  • El compilador puede generar una función operator= predeterminada para los tipos de clase si no existe ninguna.

El ejemplo siguiente muestra cómo declarar un operador de asignación:

class Point
{
public:
    int _x, _y;

    // Right side of copy assignment is the argument.
    Point& operator=(const Point&);
};

// Define copy assignment operator.
Point& Point::operator=(const Point& otherPoint)
{
    _x = otherPoint._x;
    _y = otherPoint._y;

    // Assignment operator returns left side of assignment.
    return *this;
}

int main()
{
    Point pt1, pt2;
    pt1 = pt2;
}

El argumento proporcionado es el lado derecho de la expresión. El operador devuelve el objeto para preservar el comportamiento del operador de asignación, que devuelve el valor del lado izquierdo después de que se complete la asignación. Esto permite encadenar asignaciones, como:

pt1 = pt2 = pt3;

El operador de asignación de copia no debe confundirse con el constructor de copia. Este último se llama durante la construcción de un nuevo objeto a partir de uno existente:

// Copy constructor is called--not overloaded copy assignment operator!
Point pt3 = pt1;

// The previous initialization is similar to the following:
Point pt4(pt1); // Copy constructor call.

Nota:

Es aconsejable seguir la regla de tres de que una clase que define un operador de asignación de copia también debe definir explícitamente el constructor de copia, el destructor y, a partir de C++11, el constructor de movimiento y el operador de asignación de movimiento.

Consulte también