Benutzerdefinierte Streamausgaben meint folgendes Szenario:

Es folgt ein Beispiel mit verschiedenen, selbstdefinierten Datentypen und den dazu geeigneten Operatorfunktionen "<<", welche also die bisher existierenden Ausgabeoperatoren überladen.

#include <iostream>

using namespace std;

typedef struct
{
 double Re, Im;
} TComplex;

typedef double T3DimVector[3];

typedef struct
{
 char name[21];
 int age;
} TFriend;

ostream& operator << (ostream& os,TComplex z)
{return os<<z.Re<<" + j*"<<z.Im;}


ostream& operator  << (ostream& os,T3DimVector v)
{return os<<'('<<v[0]<< ','<<v[1]<< ','
  <<v[2]<< ')';}


ostream& operator << (ostream& os,TFriend f)
{return os<<"Name="<<f.name<<", Alter="<<f.age;}


int main()
{
 cout<<"Demonstration des Output-Streams cout\n\n"
  <<"Ausgabe von Standardtypen:\n"
  <<"char: "<<'a'<<'\n'
  <<"int: "<<123<<'\n'
  <<"double: "<<4.5678<<'\n'
  <<"string: "<<"Dies ist ein Text."<<'\n'
  <<endl;

 TComplex z = {1.5,3.2};
 T3DimVector v = {-2.1,7.6,5.5};
 TFriend f = {"Veronica",25};
 cout<<"Ausgabe von benutzerdefinierter Typen:\n"
  <<"TComplex: "<<z<<'\n'
  <<"T3DimVector: "<<v<<'\n'
  <<"TFriend: "<<f<<endl;

 return 0;
}
Die Ausgabeoperatoren sind fett gedruckt.

Beachten Sie, dass "<<" ein binärer Operator ist, deren Operanden von verschiedenen Typen sind.

Der erste Operand ist vom Typ ostream (Ausgabestream), der zweite Operand vom auszugebenden Datentyp.

Die Übergabe per Referenz sollten Sie bereits kennen. Auch der Rückkehrwert (Funktionsresultat) kann per Referenz geliefert werden, siehe "ostream& operator <<".