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 version

    x=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....


Anmelden zum Antworten