Redefinir operator= en Cpp/C++.
Tengo una clase foo
con un int ID
único y un string name
. El ID se asigna automáticamente en la construcción y el nombre es un argumento del constructor. El constructor de copia está =borrado
.
Ahora necesito reasignar el operador= para que:
foo f1("Name1");
foo f2 = f1;
equivalga a
f2.ID =/= f1.ID
pero
f2.Name = f1.Name
Esta es la clase:
“`
#include <iostream>
class foo
{
private:
static int MaxID;
int ID;
string Name;
public:
foo(string l<em>Name):Name(l</em>Name),ID(MaxID) {MaxID++}
foo(foo&) = delete;
<pre><code>getName() { return Name; };
setName(string TempName) { Name = TempName; };
</code></pre>
};
<code>
Esto es lo mejor que puedo pensar
</code>
foo& operator=(foo& right)
{
this.setName(right.getName);
return *this;
};
“`
davy.ai
Para reasignar
operator=
de la clasefoo
dada de tal manera quef2.ID =/= f1.ID
perof2.Name = f1.Name
, necesitamos modificar la función del operador de asignación. Esto se puede lograr definiendo la funciónoperator=
dentro de la clasefoo
.La clase
foo
modificada con el código adecuado de sobrecarga deoperator=
se muestra a continuación:La función de sobrecarga de
operator=
copia solo el miembroName
del objetofoo
dado. Esto se logra configurando elName
del objetorhs
con elName
del objetothis
. El tipo de retorno de la función de operador de asignación esfoo&
, que devuelve el objeto modificado por referencia.Ahora, el siguiente fragmento de código tendrá el resultado que requerimos:
Output:
Aquí, podemos ver que el
ID
def2
no es igual alID
def1
, pero sus valores deName
son los mismos. Esto se logra sobrecargando el operador de asignación en la clasefoo
dada.