Frage....................
-
Moin moin
ich bin gerade auf ein Stück Code gestossen, den ich nicht kapiere:
class Array { public: int& elem(unsigned i) { if (i > 99) error(); return data[i]; } private: int data[100]; }; int main() { Array a; a.elem(10) = 42; a.elem(12) += a.elem(13); ... }
Meine Frage dazu:
Diesesint& elem(unsigned i) { if (i > 99) error(); return data[i]; }
verweirrt mich irgendwie völlig. So wie ichs gelernt hab, ist das ja eine Funktion. Aber wie kann man denn dann folgendes schreiben:
a.elem(10) = 42;
Ich kann doch nicht eine Funktion etwas zuweisen, oder was geschieht hier ganz genau?
Bitte nicht schimpfen, wenn ich das Forum mit solchen Anfängerfragen belaste, aber kenn sonst keinen den ich fragen könnte.MFG
Anfänger
-
der trick ist der rückgabewert von elem(). sie gibt ne referenz auf nen int zurück. ne referenz auf data[i]. über die referent kann man dann data[i] doch ändern.
-
es wird eine referenz zurückgegeben, du änderst also den wert, auf den die referenz 'zeigt':
mal ohne funktionint i = 20; int &i_ref = i; i_ref = 42; //jetzt: i == 42 //deine funktion - ein bisschen aufgelöster Array arr; int &tmp = arr.elem(20); tmp = 42; //jetzt: arr.data[20] == 42 //und das ganze ohne die temporäre variable: arr.elem(20) = 42; //entspricht also (int &ref = arr.elem(20), ref=42);
-
man weist nicht der funktion ein wert zu sondern den rückgabewert von der funktion
hier ein link http://www.fun-soft.de/Download/EBook/cplusplus/kap09.html
-
Herzlichen Danke...habs jetzt kapiert.
Hab mich auch erst gewundert warum das "&" nicht direkt hinter elem steht.
Gibt es für solche Fragen, vielleicht auch nen IRC-Channel? Manchmal stell ich mir doch schon mehrere solche Fragen auf die ich selbst nach längerem Überlegen nich komme.
-
Original erstellt von <Anfänger>:
Gibt es für solche Fragen, vielleicht auch nen IRC-Channel?vielleicht #cpp auf euirc.net
für so schnelle fragen sollte immer einer da sein.