Genau, das ist der operator[] - allerdings muss der auf eine Instanz der Klasse TestKlasse aufgerufen werden, so wie du das jetzt dastehen hast, darf es nicht gehen.
Und mit ominösem C++ hat das wenig zu tun. Sind halt Operatoren...
Ein guter Link zum ganzen Themenblock Operatoren überladen gibt es
hier, gibt dort auch ein paar Folgeartikel, darfst sie dir gerne selber suchen
Ansonsten noch ein paar kleine Dinge:
* Konvertierungsoperatoren (dein "operator const char*") sollten nach Möglichkeit vermieden werden. Es macht Code auf Dauer unverständlicher, nur für ein wenig Syntactic Sugar, und man kann auch in richtig doofe Fehler laufen...
* ebenso soll der char* operator+ nur schönere (lies: weniger Schreibarbeit) Syntax bieten. Das geht aber auch so:
Code: Alles auswählen
TestKlasse t;
// char* cprt_at = t+3;
char* cprt_at = &t[3];
Genauso überflüssig ist dann natürlich der Konvertierungsoperator:
Code: Alles auswählen
TestKlasse t;
//const char* cprt_at = t; // siehst du, wie schwer zu erkennen ist, was hier gerade abläuft?
const char* cprt_at = &t[0]; // Macht man genau so auch mit std::vector!
* Statt rohen statischen Arrays sollte man in C++ direkt zu std::array (bzw. boost::array/std::tr1::array, falls man noch kein c++11 hat) greifen. Die machen Range-Checks im Debug-Modus, was das Fehler finden deutlich erleichtert! Für Arrays variabler Länge nimmt man sowieso std::vector bzw. std::string.
* Wenn du der Verständlichkeit wegen die Daten direkt als const char* zurück geben willst (und andere Sachen), mach es über Funktionen - die haben einen Namen, der direkt sagen kann, was passiert, z.B. [c]const char* TestKlasse::data() const[/c]
* Auf const-correctness gehe ichlieber noch nicht ein
(Suchen hilft, wenns dich interessiert).