String-Klasse - operator[]
-
Hallo,
ich habe hier ( http://tutorial.schornboeck.net/los/string.htm ) eine String-Klasse gesehen und hätte dazu ein paar Fragen:char& operator[](int index) { return value[index]; } char const& operator[](int index) const { return value[index]; }Wieso gibt es dort 2 Signaturen für operator[]? Was ist der Zweck, in welchem Fall wird welche Methode genommen und wieso lässt der Compiler das zu? Liegt das etwa an dem hinteren const in der 2. Signatur? Was bedeutet das const dort? Dass die Methode keine Member-Vars ändern darf?
Ist der Anwenndungsfall etwa so?
String s("Hallo"); char c = s[0]; // 2. Signatur mit const wird genommen s[0] = 'h'; // 1. Signatur wird genommenWenn ja, wieso reicht dann nicht nur die 1. Signatur?
-
Welcher der beiden Operatoren genommen wird, hängt ausschließlich vom Objektparameter (bei dir s) ab.
Wenn s nicht konstant ist (wie hier beide male), wird die erste Überladung genommen, sonst die zweite.
Die erste Überladung erlaubt es, das gewählte Zeichen zu verändern - erfordert es aber nicht, wenn nur
der Wert gesucht ist - wie bei dir im 1. Fall - ist das genauso gut. Die zweite Überladung wiederum
kann nicht dazu genutzt werden, das Zeichen zu verändern - und genau darum geht es: ein konstantes Objekt
(oder eine Referenz auf const) soll nicht veränderbar sein und die einzelnen Zeichen sind ja logisch
Bestandteil der Klasse.
-
Vielen Dank. Hab zufällig eben auch das Kapitel hier zu const-Methoden gesehen: http://tutorial.schornboeck.net/constmethode.htm . Jetzt ists klarer.

-
PS: Bist DU eigentlich der, der bei CS immer rumcampt?
