Warum & vor operator...
-
Wie schon im Titel genannt, frage ich mich, welche Bedeutung der Adressoperator vor operator hat. Lass ich ihn weg, so ändert sich an der Ausgabe nichts.
#include <iostream> using namespace std; class C_Vektor { private: int x; int y; int z; friend ostream &operator<<(ostream &ausgabe, const C_Vektor &vec); public: C_Vektor() : x(0), y(0), z(0) {} C_Vektor(int x_, int y_, int z_) : x(x_), y(y_), z(z_) {} ~C_Vektor() {} void Output(ostream &ausgabe) const { ausgabe << "(" << x << " " << y << " " << z << ")"; } }; ostream &operator<<(ostream &ausgabe, const C_Vektor &vec) { vec.Output(ausgabe); return ausgabe; } int main(int argc, char *argv[]) { C_Vektor myvec(1,2,3); cout << myvec << endl << endl; return 0; }
-
//Edit: Falsch gelesen:
Also der 'Adressoperator' (weiß nicht ob man ihn in hier so nennen darf), gibt in diesem Fall eine Referenz auf ostream zurück und nicht die Adresse. Dies hat den Vorteil, das der aktuell veränderte output-stream selbst zurückgegeben wird, und du so Ausgaben weiterhin verketten kannst.
Ohne die Referenz wird eine Kopie von ostream zurückgegeben.
Caipi
-
Dies hat den Vorteil, das der aktuell veränderte output-stream selbst zurückgegeben wird
Das hat vorallem den Vorteil, das es korrekt ist. Die by-value-Rückgabe eines ostreams ist schließlich gar nicht möglich, da ostream keinen zugreifbaren Copy-Ctor definiert.
-
HumeSikkins schrieb:
Dies hat den Vorteil, das der aktuell veränderte output-stream selbst zurückgegeben wird
Das hat vorallem den Vorteil, das es korrekt ist. Die by-value-Rückgabe eines ostreams ist schließlich gar nicht möglich, da ostream keinen zugreifbaren Copy-Ctor definiert.
@Hume:
Oh. Das hab ich gar nicht gewusst... Ist aber auch sinnvoll (imho). Danke!Caipi