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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top