Cómo funciona el operador de asignación con diferentes tipos de objetos?
-
05-09-2019 - |
Pregunta
class A {
public:
void operator=(const B &in);
private:
int a;
};
class B {
private:
int c;
}
lo siento. no ocurrió un error. es válida operador de asignación? o ¿hay alguna manera de lograr esto? [No hay relación entre A y clase B.]
void A::operator=(const B& in)
{
a = in.c;
}
Muchas gracias.
Solución
Sí, puede hacerlo.
#include <iostream>
using namespace std;
class B {
public:
B() : y(1) {}
int getY() const { return y; }
private:
int y;
};
class A {
public:
A() : x(0) {}
void operator=(const B &in) {
x = in.getY();
}
void display() { cout << x << endl; }
private:
int x;
};
int main() {
A a;
B b;
a = b;
a.display();
}
Otros consejos
Esto no es una respuesta, pero hay que tener en cuenta que el lenguaje típico para el operador de asignación es tener que devolver una referencia al tipo de objeto (en lugar de vacío) y para volver (* esto) al final. De esta manera, se pueden encadenar el assignent, como en a = b = c:
A& operator=(const A& other)
{
// manage any deep copy issues here
return *this;
}
Tanto operador de asignación y constructores parametrizados pueden tener parámetros de cualquier tipo y utilizar los valores de estos parámetros la forma que desee para inicializar el objeto.
Otros han puesta al tanto de esto, pero en realidad va a decirlo. Sí se pueden utilizar diferentes tipos, pero tenga en cuenta que a menos que utilice amigo, su clase no puede tener acceso a los miembros privados de la clase que está siendo aprobada en el operador.
es decir, un no sería capaz de acceder a la B :: C porque es privado.