String Klasse
-
Ich habe mal wieder eine Frage... Ich bin grad dabei aus nem Buch eine String Klasse zu übernehmen.. bis jetzt ist alles klar, verschiedene Konstruktoren, dann wird der =-Operator überladen, doch nun kommen 2 überladene Operatoren bei denen ich nicht verstehe, was sie bewirken bzw was man damit anfangen kann:
char& String::operator[](int offset) // nicht konstanter Offset Operator gibt Referenz auf Zeichen zurück { if (offset > itsLen) { return itsString[itsLen-1]; } else { return itsString[offset]; } } char String::operator[](int offset) const // konstanter Offset Operator für konstante Objekte { if (offset > itsLen) { return itsString[itsLen-1]; } else { return itsString[offset] } }
und dann noch ne frage:
[/cpp]
String::String(const char* const cString)
{
itsLen = strlen(cString);
itsString = new char[itsLen+1];
int i;
for (i = 0; i<itsLen; i++)
{ itsString[i] = cString[i]; }
itsString[itsLen] = '\0';
// cout << "String(char*) Konstruktor...\n";
// ConstructorCount++;
}
[cpp]wird dort an das Ende des Strings noch ein Leerzeichen gesetzt oder was bewirkt das '\0'
-
Der Index-Operator kommt normalerweise in Paaren, damit User Zugriff auf const Elemente haben.
Es gibt eine const- und non-const Version.
Die const-Version returned normalerweise das Object per const-reference und die non-const Version per non-const-reference.Aufrufe der const-Version sind nicht lvalue und koennen daher nicht auf der linken Seite des Zuweisungsoperators stehen.
[cpp]
void sample(Array& a, const Array& b)
{
Foo x,y;
x=a[3]; //get value of a[3]
a[3]=y; //Change a[3] : compiler generiert call fuer die non-const versionx=b[3]; //get value of b[3]
/*ERROR*/: b[3] = y; // b ist als const deklariert
}[/cpp]
-
DarkSea schrieb:
wird dort an das Ende des Strings noch ein Leerzeichen gesetzt oder was bewirkt das '\0'
fast. es wird auf 0 (null) gesetzt. dann hast du einen null-terminierte (haha) zeichenfolge.
@andere frage.
wie ich das sehe, kannst du bei dem ersten das zeichen verändern (string[10] = 'a'), beim anderen nur zugreifen (char a = string[10]). oder so ähnlich
-
hmmm meine Frage war eher: was macht dieser [] operator eigentlich und wozu ist der offset da ?
ist der operator damit gemeint, dass man wenn man nen String hat der "derString" heißt mit derString[3] nur den 4. char, also hier "S" ausgeworfen bekommt ? und wenn ja: wo übergibt man da einen int an die Funktion ?
-
DarkSea schrieb:
ist der operator damit gemeint, dass man wenn man nen String hat der "derString" heißt mit derString[3] nur den 4. char, also hier "S" ausgeworfen bekommt ? und wenn ja: wo übergibt man da einen int an die Funktion ?
die "3" ist dein int.
-
*lichtaufgeh* ahhh danke, irgendwie auch logisch....