You are not logged in.

  • Login

1

Saturday, August 6th 2011, 10:36pm

Ü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:

C/C++ Quellcode

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


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:

C/C++ Quellcode

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


Quoted

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

This post has been edited 1 times, last edit by "Florian" (Aug 6th 2011, 10:42pm)


2

Saturday, August 6th 2011, 11:58pm

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

3

Sunday, August 7th 2011, 10:02am

Das ist einleuchtend - danke!

Similar threads

Social bookmarks