l'operatore di assegnazione funziona con diversi tipi di oggetti?
-
05-09-2019 - |
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.
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.