Überladener Ausgabeoperator und die Rückgabewerte von Funktionen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Überladener Ausgabeoperator und die Rückgabewerte von Funktionen

    Hallo,

    bei meinen ersten Gehversuchen mit C++ erstellte ich eine Klasse für komplexe Zahlen und überlud den Standardausgabeoperator dementsprechend:

    Quellcode

    1. ostream& operator<<(ostream& os, const komplex& z) {
    2. os << z.r << '+' << z.i << 'i';
    3. return os;
    4. }


    Ich kann allerdings nicht nachvollziehen, warum der Parameter z als konstant deklariert sein muss, damit diese Überladung auch mit Funktionen, die eine Instanz von komplex zurückgeben, funktioniert.

    Vereinfachtes Beispiel:

    Quellcode

    1. ostream& operator<<(ostream& os, komplex& z); // Schnittstelle verändert!
    2. // […]
    3. komplex f();
    4. // […]
    5. {
    6. komplex a(1, 1);
    7. cout << a; // Das funktioniert
    8. cout << f(); // Das hingegen nicht
    9. }
    Alles anzeigen


    Fehler: no match for »operator<<« in »std::cout << f()«

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Florian ()

  • Na ganz einfach mit komplex& z deklarierst du eine Referenz auf eine Variable die du theoretisch verändern darfst, deswegen erwartet der kompiler das du im eine Variable gibst. Bei einer Konstante würde er sagen; ne geht nicht.
    Beim aufruf über die Funktion machst du dann auch nichts anderes als ein temporäres const Objekt ("Variable") zu übergeben und die darfst du nicht ändern, würde auch im Prinzip auch keinen Sinn ergeben diese zu ändern.

    Mit dem Stichwort const vor dem Parametertyp wird dann ausgedrückt dass der Wert nicht geändert und nur ausgelesen wird.

    Mfg Rushh0ur