La bibliothèque iostream permet d'afficher les types de bases (int, char *, float,...). Grâce au mécanisme de surcharge, il est possible d'étendre cette bibliothèque à des types définis par le programmeur. Soit le type X, la surcharge de l'opérateur d'écriture est de la forme : ostream &operator << (ostream &, const X &)
la surchage de l'opérateur de lecture est de la forme : istream &operator >> (istream &, X &)
Les surcharges doivent renvoyer une référence sur une variable de type istream ou ostream pour permettre un encha^nement d'opérations de lecture ou écriture. Il faut donc renvoyer une référence sur le premier paramètre afin que ce dernier devienne le paramètre de l'opération suivante :
int i=5,j=4 ; cout << i << j ;cette opération n'est possible que si le résultat de cout << i est de type ostream &, en l'occurence une référence sur cout.
class complexe {
double re,im ;
public:
...
friend ostream & operator << (ostream & os, const complexe &c) ;
friend istream & operator >> (istream & is, complexe & c) ;
} ;
ostream operator << (ostream & os, const complexe &c) ;
cout << "( ", << c.re << " , " << c.im << " ) " ;
return os ;
}
istream operator >> (istream & is , complexe & c) {
cin >> c.re ; // version simplifiee
cin >> c.im ; // sans gestion d'erreur
return is ;
}
int main(void) {
complexe c1(3.0,1.0) ;
int i ;
cout << c1 << i ;
...