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-Bezeichner

    ostream& 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.


Anmelden zum Antworten