<< Überladen



  • Eigene Ausgabefunktion:

    ostream& meineKlasse::meineAusgabe(ostream& Stream) 
    {
    	Stream<<private_a;
            Stream<<private_b;
    	return Stream;
    }
    

    Überladen:

    ostream& operator<<(ostream& Stream, meineKlasse& x) 
    {
    	x.meineAusgabe(Stream);
    	return Stream;
    }
    

    1. Mir ist die Herangehensweise nicht ganz klar. Meine Idee (bin mir aber unsicher): Der Ausgabeoperator wird außerhalb der Klasse überladen, da der erste Operand kein Element der Klasse ist. Problem: Zugriff auf private Data Member nicht möglich und deshalb schreibe ich eine eigene Klassenmethode zur Ausgabe!?

    2. Verstehe ich die eigene Ausgabefunktion nicht. Das fängt schon beim Rückgabewert an (Ostream Referenz). Was ist das eigentlich für ein Datentyp?
    Der erste Paramter ist ja der this Zeiger, der zweite ist mir dann wieder unklar. Es wäre nett wenn jemand nen paar Worte drüber verlieren könnte.

    Vielen Dank für die Hilfe


  • Mod

    1. Benutze friend oder eine public-Ausgabefunktion die du dann im Operator aufrufst.
    2. Nun, eine ostream-Referenz hat den Typ ostream-Referenz. Mir ist die Frage nicht klar.



  • Laut Aufgabenstellung darf dieses leider nicht benutzt werden (sorry vergessen zu posten). Ist mein Gedankengang denn richtig wenn friend verboten ist? Funktionieren tut es ja so auch.



  • Gast21 schrieb:

    1. Mir ist die Herangehensweise nicht ganz klar. Meine Idee (bin mir aber unsicher): Der Ausgabeoperator wird außerhalb der Klasse überladen, da der erste Operand kein Element der Klasse ist.

    Du meinst "Objekt" oder "Instanz", nicht "Element". Elemente einer Klasse sind die Dinger, die Du in der Klasse deklarierst.

    Gast21 schrieb:

    Problem: Zugriff auf private Data Member nicht möglich und deshalb schreibe ich eine eigene Klassenmethode zur Ausgabe!?

    Du meinst "Objektmethode" statt "Klassenmethode". Ja, der Ansatz ist ja völlig okay.

    Gast21 schrieb:

    2. Verstehe ich die eigene Ausgabefunktion nicht. Das fängt schon beim Rückgabewert an (Ostream Referenz). Was ist das eigentlich für ein Datentyp?
    Der erste Paramter ist ja der this Zeiger, der zweite ist mir dann wieder unklar.

    Das ist eine freie Funktion. Da gibt's kein "this". operator<< als freie Funktion bekommt als ersten Parameter das, was link von << steht und als zweiten Parameter das, was rechts von << steht. Das Ergebnis davon sollte sich wieder auf das stream-Objekt beziehen, so dass du << beispielsweise nochmal anwenden kannst:

    stream << a << b;
    ist äquiv zu
      (stream << a) << b;
    

    da << links assoziativ ist. Damit Du auch noch b ausgeben kannst, muss das Ergebnis von stream<<a sich auf das std::ostream-Objekt beziehen. Daher gibt operator<< eine Referenz auf das Objekt zurück.


Anmelden zum Antworten