Was ist hier eigentlich der Unterschied?
-
Was ist eigentlich der Unterschied zwischen diesen beiden Operatoren?
inline double& Point3D::operator [] ( int i) { assert(! (i < PX || i > PZ)); return n[i]; } inline double Point3D::operator [] ( int i) const { assert(! (i < PX || i > PZ)); return n[i]; }
-
das const.
-
Augen habe ich und lesen kann ich auch noch, nur was bedeutet dieses & und das const am Ende. Welchen Grund gibt es für die unterschiedlichen Schreibweisen?
-
die antwort darauf steht doch bereits im internet.
-
const heißt, dass die methode das obj. nicht veraendert.
-
was der ampersand heißt, weiß ich auch nicht...
-
& heißt an der stelle 'Referenz'
-
Also wenn ich das jetzt richtig verstehe dann bedeutet das const am Ende, das dass Objekt nicht durch den Aufruf des Operators verändert wird. Das UND bedeutet also, das eine Referenz/Pointer auf das entsprechende Element zurückgegeben wird.
Jetzt sind aber beide Methoden bekannt, welche wird dann eigentlich in welchem Zusammenhang verwendet, wenn die eine den Wert kopiert und die andere eine Referenz zurückgibt.
punkt[0] // Gibt das jetzt einen Pointer oder einen Wert zurück?
-
Das kommt ganz darauf an, wie du punkt dekalriert hast:
Point3D vpunkt; vpunkt[0];// ruft die nicht-const Version auf const Point3D cpunkt; cpunkt[0];// ruft die const Version aufTechnisch besteht der Unterschied darin, daß Varainte 1 für veränderliche Objekte (Punkte) aufgerufen wird und eine Referenz auf deine internen Daten liefert (die kannst du nun z.B. in "vpunkt[0]=7;" verwenden), während Variante 2 für konstante Objekte genutzt wird und eine Kopie des internen Wertes liefert ("cpunkt[0]=7;" wäre illegal).
-
Danke, das hat mir sehr geholfen, jetzt verstehe ich das endlich
