Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » + Operator überladen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.06.2004, 19:09 Uhr
~Christoph Redl
Gast


Hallo!

Ich schreibe gerade eine String-Klasse.
Diese verwaltet intern ein char-Array wo der String gespeichert wird und einen Integer, wo die Länge gespeichert wird.

Nun möchte ich den Operator + überladen:


C++:
const String String::operator+ (String& s2){

    char* newString = new char[this->size + s2.getLength() + 1];
    strcpy(newString, this->str);
    strcpy(newString + sizeof(char) * this->size, s2.str);
    newString[this->size + s2.getLength()] = '\0';
    String sNew(newString);
    delete newString;
    return sNew;

}


Problem dabei: Nachdem die Funktion aus ist enthält das Objekt "sNew" keinen gültigen String mehr. Er ist mit lauter komischen Zeichen aufgefüllt. Die Integer-Variable ist jedoch nach wie vor gültig.
Liegt wahrscheinlich daran, dass ich ein lokales Objekt erzeuge und dieses nach der Funtktion zerstört wird, aber wie mache ich es sonst? Habe gerade ein Tutorial gesehen wo es auch so gemacht wird.

Falls es hilft, hier noch die Klassendefinition:


C++:
class String{

public:
    char* str;
    String(const char*);
    String(char, long);
    String(String&);
    ~String();
    const long getLength() const{
        return this->size;
    }
    const char* getString() const{
        return this->str;
    }
    void print();
    const String operator+ (String&);
    const String operator+= (String&);

private:
    long size;

};



Ich weiß schon, dass es bereits eine fertige String-Klasse gibt - soll nur eine Übung sein.

Danke schonmal!

mfg

Dieser Post wurde am 04.06.2004 um 19:16 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.06.2004, 20:52 Uhr
ao

(Operator)


Der Konstruktor String (const char *), macht der eine richtige Kopie von dem übergebenen String oder biegt er nur die Membervariable str um?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.06.2004, 06:02 Uhr
~Christoph Redl
Gast


Der Konstruktor mit const char* passt, der kopiert den String wirklich.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.06.2004, 14:41 Uhr
0xdeadbeef
Gott
(Operator)


Sowas in der Art:

C++:
class String{
private:
    char* str;
    long size;

public:
    String(const char*);
    String(char, long);
    String(String&);
    ~String();

    inline long getLength() const{
        return this->size;
    }
    inline const char* getString() const{
        return this->str;
    }
    void print();
    String operator+= (const String&);
};

String operator+(const String&, const String&);



C++:
String String::operator+=(const String &s) {
  char *p = new char[getLength() + s.getLength() + 1];
  memcpy(p, str, getLength());
  memcpy(p+size, s.getString(), s.getLength());
  p[size + s.getLength()] = 0;
  delete[] str;
  str = p;
}

String operator+ (const String &s1, const String &s2) {
  String ret = s1;
  ret += s2;
  return ret;
}


Ist nicht sonderlich optimiert, aber müsste gehen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 05.06.2004 um 14:42 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: