Referenzen und Konstanten: Dynamische Komponenten bei konstanten Objekten (1/2)

Man beachte, daß allein durch Verwendung des Schlüsselwortes const ein Operator für eine Klasse mehrfach implementiert (überladen) werden kann. Bei unserer complex-Klasse macht dies nicht viel Sinn, aber es gibt durchaus Anwendungen, wo diese Möglichkeit sinnvoll eingesetzt werden kann. Insbesondere bei dem Umgang mit konstanten Objekten, die dynamische Elemente besitzen. Da Pointer jedoch erst in einem späteren Kapitel behandelt werden, hier nur eine kurze Problembeschreibung:
Man denke sich eine Klasse String mit dem Operator [], mit dem auf ein Element im String zugegriffen werden kann.

  class String {
      private:
          char* cstring;
          ...
      public:
          // liefert i-tes Zeichen des Strings zurück
          char& operator [] (unsigned) const;
          ...
  };

Diese Deklaration erlaubt es uns zum einen, den Operator [] auch für konstante String-Objekte aufzurufen. Sie erlaubt es uns aber auch, Konstanten zu manipulieren:

  const String s = "Test";

  s[0] = 'W';    // wird NICHT als Fehler erkannt!