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 ; ...