Domanda

class A {
public:
void operator=(const B &in);
private:
 int a;
};

class B {
private:
 int c;

}

Scusa.si è verificato un errore.l'operatore di assegnazione è valido?o c'è un modo per raggiungere questo obiettivo?[Non esiste alcuna relazione tra le classi A e B.]

void A::operator=(const B& in) 
{ 
a = in.c;

} 

Molte grazie.

È stato utile?

Soluzione

Sì, è possibile farlo.

#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();
}

Altri suggerimenti

Questa non è una risposta, ma si dovrebbe essere consapevoli che il linguaggio tipico per l'operatore di assegnazione è di avere restituire un riferimento al tipo di oggetto (non nullo) e ritornare (* questo) alla fine. In questo modo, è possibile concatenare l'assignent, come in a = b = c:

A& operator=(const A& other) 
{
    // manage any deep copy issues here
    return *this;
}

Sia operatore di assegnazione e costruttori parametrizzati possono avere parametri di qualsiasi tipo e utilizzare i valori di questi parametri alcun modo che vogliono per inizializzare l'oggetto.

Altri lo hanno capito, ma lo dirò davvero.Sì, puoi usarne diversi tipi, ma tieni presente che, a meno che non usi friend, la tua classe non può accedere ai membri privati ​​della classe a cui viene passata con l'operatore.

Ciò significa che A non sarebbe in grado di accedere a B::c perché è privato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top