kleines Problem mit << Operator
-
Hallo zusammen!
Hier meine Frage zum "<<" Operator:Angenommen man möchte die Elemente der Klasse PRIMARY mit dem
"<<" operator gleich ausgeben, dann muss der "<<" operator überladen werden:
(als globale Funktion)ostream& operator<<(ostream& os,PRIMARY& m){ os<<m.Zahl1<<"\t"<<m.Zahl2<<endl; return os; }
(oder als friend der Klasse um zusätzlich auf private Elementvariablen zuzugreifen)
friend ostream& operator<<(ostream& os,PRIMARY& m)
könnte man anstelle der obigen (globalen Funktion) auch schreiben:
ostream& operator<<(ostream& os,PRIMARY& m){ cout<<m.Zahl1<<"\t"<<m.Zahl2<<endl; // einfach cout nehmen statt os return cout; // cout zurückgebenstatt os }
Könnte man hier statt der Referenz auf cout also "os" auch einfach cout hernehmen?
Wenn ja warum nimmt man dann trotzdem standardmäßig die Referenz auf cout?
-
damit der operator<< auch mit ofstream und ostringstream und falls einer socketstream oder cryptedfilestream hat auch damit geht.
-
Kannst du mir einen kleinen Beispielcode dafür zeigen?
-
ofstream datei("meinedatei.txt"); PRIMARY p; // was auch immer das ist :) datei << p;
Ich würde erwarten, dass p sich in die Datei schreibt, nicht dass irgendwo plötzlich ein Text auf dem Bildschirm steht.
-
@guanin: sieht doch gut aus dein op<<
kleine Verbesserung: wie wäre es mit read-only-Bezeichnerostream& operator<<(ostream& os, const PRIMARY& m){ os<<m.Zahl1<<"\t"<<m.Zahl2<<endl; return os; }
-
yup Danke! Werd ich dann auch mit const machen!
und noch ne Frage:
ofstream datei("meinedatei.txt"); PRIMARY p; // was auch immer das ist :) datei << p;
Ist das einfach so möglich eine ofstream Referenz an eine ostream Referenz zu übergeben,da die obige Operatorfunktion ja eigendlich eine ostream Referenz verlangt?
-
ostream ist eine öffentliche Basisklasse für ofstream (Stichwort: Vererbung, Polymorphie), deshalb geht das natürlich.