PDA

View Full Version : [C++] overloading operatori di stream


86pietro
25-04-2018, 19:54
Per una classe Persona (string Nome, char* Cognome, char CF, int Età) ho scritto l'overloading degli operatori di stream in questo modo
https://78.media.tumblr.com/355e4c00e8470fbd2452123afd3a555d/tumblr_p7r89t8imV1re64jjo1_500.png
Non ho capito l'utilità di ritornare i valori in e out, le funzioni lavorano anche senza

british
26-04-2018, 08:10
In questo modo puoi effettuare il chaining:

cout << "hello" << "world";

86pietro
26-04-2018, 14:53
In questo modo puoi effettuare il chaining:

cout << "hello" << "world";

Ma questo posso farlo anche senza return in e return out;

british
27-04-2018, 08:24
Ma questo posso farlo anche senza return in e return out;

No non puoi.


void operator<<(ostream & os, const Persona & p)
{
os << p.Nome;
}

Persona p1;
Persona p2;
cout << p1 << p2;


non è valido.

86pietro
27-04-2018, 11:54
Guarda, ti assicuro che me lo fa passare lo stesso
https://78.media.tumblr.com/24830550b63bcfc3dad1073f0fdf0ef4/tumblr_p7r89t8imV1re64jjo2_r1_540.png

british
27-04-2018, 12:42
Sì, ma non è corretto (che compilatore usi? hai i warning attivi? configurazione debug/release?).
Una funzione dichiarata non void deve restituire esplicitamente qualcosa. Se il return viene omesso, il risultato è "undefined behavior" ed è categoricamente sconsigliabile farci affidamento: può funzionare sì oppure no oppure solo in certe circostanze ma è assolutamente a caso.

86pietro
27-04-2018, 15:10
Giusto, non avevo considerato il tipo di ritorno
Grazie mille