21/06/13 13:32
TheKaneB
si fa esattamente come per le classi.
In C++, le struct e le classi sono quasi totalmente identiche, solo che le classi hanno default scope "private" mentre le struct sono default "public". Fine.
In C++, le struct e le classi sono quasi totalmente identiche, solo che le classi hanno default scope "private" mentre le struct sono default "public". Fine.
aaa
21/06/13 13:56
sghisha
ok...
ci sono riuscita in questo modo
poi se volessi stampare a video il tipo nodo? ho provato questo
ma evidentemente non va bene.
ci sono riuscita in questo modo
bool operator ==(nodo &a, nodo &b){ if ((a.idUtente==b.idUtente)&&(a.richiesta==b.richiesta)){ return true; } else return false; }
poi se volessi stampare a video il tipo nodo? ho provato questo
void operator << (nodo a){ cout<<a.idUtente; cout<<a.richiesta; }
ma evidentemente non va bene.
aaa
21/06/13 18:24
lumo
Postato originariamente da sghisha:
ok...
ci sono riuscita in questo modo
poi se volessi stampare a video il tipo nodo? ho provato questo
ma evidentemente non va bene.
ok...
ci sono riuscita in questo modo
bool operator ==(nodo &a, nodo &b){ if ((a.idUtente==b.idUtente)&&(a.richiesta==b.richiesta)){ return true; } else return false; }
poi se volessi stampare a video il tipo nodo? ho provato questo
void operator << (nodo a){ cout<<a.idUtente; cout<<a.richiesta; }
ma evidentemente non va bene.
L'operatore << è binario, quindi per forza di cose deve prendere due parametri
quindi intanto sarà
QUALCOSA operator << (QUALCOSA, QUALCOSA2) { ... }
come si fa a capire cos'è quel qualcosa? Beh basta guardare il codice più banale del mondo
cout << "Hello world!" << "\n";
Ho usato "\n" al posto di endl per semplificare la spiegazione ma le cose non cambiano in quel caso.
In pratica quella riga in realtà viene vista dal compilatore come:
(cout << "Hello world!") << "\n"
(Si noti che l'operatore <<, come +, - e molti altri è associativo a sinistra)
A questo punto è ovvio che il risultato non può essere void, altrimenti (void) << "\n" avrebbe poco senso.
Invece ha senso che "\n" venga mandato a sua volta sullo stesso stream, e cioè cout.
E quindi vuol dire che il risultato della parentesi interna (cout << "Hello world!" è cout, e cioè il tipo di ritorno è std::ostream&
Poiché cout << "Hello world!" è un'espressione binaria, e a destra ha una stringa, a sinistra ha ancora cout, il tipo della funzione in questo caso sarà:
std::ostream& operator <<(std::ostream& out, const char* string) { ... }
Nel tuo caso ti basta fare:
std::ostream& operator<<(std::ostream& out, node& n) /* o meglio, std::ostream& operator<<(std::ostream&out, const node& n), ma mi sa che all'università non te lo dicono :P*/ { out << n.idUtente << n.richiesta; return out; }
O una cosa simile, insomma formatta l'output a tuo piacimento.
Ricorda quel return alla fine, serve per permettere la concatenzione di più <<.
Ultima modifica effettuata da lumo 21/06/13 18:47
aaa