giovedì, gennaio 11, 2007

Overload dell'operator << (classe complessi)

Ciao a tutti,
qualche tempo fa, mentre si facevano i primi overload di operatori nelle classi "complesso" e "istogramma", era nata l'idea di overloadare (!!) l'operator <<
int main() {
complesso z(2,5);
std::cout <<>
...
}
In modo tale da visualizzare a schermo un numero complesso trattandolo come se fosse una variabile qualsiasi (float, double, int...).
Ho caricato nel gruppo il file complessiKri.cc (2) che contiene l'overload dell'operator <<.
Mi permetto di sottilineare alcune particolarità che ho notato:
1. l'overload è dichiarato nel seguente modo: std::ostream & operator<< (std::ostream & out, const complesso &original) quindi questo overload non è un metodo della classe complessi (altrimenti ci sarebbe stato scritto &complesso::operator<<).
2. Per questo motivo uno degli argomenti è proprio complesso &original che è il numero complesso che viene stampato a schemo.
3. operator<<> può accedere ai membri/metodi della classe che sono dichiarati "private" , infatti, ho dovuto utilizzare le funzioni Rez() e Imz() per ottenere la parte reale e immaginaria del numero, inoltre le ho dovute chiamare con la sintassi original.Rez() e original.Imz().
4. Per overloadare operator<< std::ostream, che è di un nuovo tipo rispetto a quelli inontrati finora.
Spero possa essere utile.
Ciao ciao
Cristian

1 commento:

hronir ha detto...

Per il punto 3, una soluzione piu' comoda (e frequentemente utilizzata) è quella di dichiarare la funzione (come diceva Christian++ non è un metodo!) come friend della classe complessi, così che essa possa accedere ai suoi attributi privati...