+ Operator



  • Hi,

    Als Übung habe ich eine String.h Klasse geschrieben. Soweit hat es funktioniert,
    wenn man ein Objekt

    String s1("hello "), s2("world"), s3;
    s1.print();

    anlegt, ist die Ausgabe "hello".

    Aber wenn man so macht

    String s1("hello "), s2("world"), s3;
    s3 = s1 + s2;
    s1.print();

    ist die Ausgabe

    hello world
    Segmentation fault

    Was passiert da?
    Danke

    class String
    {
    private:
    char *zeichenkette, hilfe;
    size_t strlen_helper (char * zeichenkette)
    {
    if (zeichenkette == NULL)
    return 0;
    else
    return strlen (zeichenkette);
    }
    public:
    String(char *zeichenkette_ = "\0"):
    zeichenkette(new char [strlen_helper(zeichenkette_) + 1])
    {
    strcpy (zeichenkette, zeichenkette_);
    }

    ~String()
    {
    delete [] zeichenkette;
    }
    String operator + (const String&);
    void print();
    };

    String String::operator+(const String& rhs)
    {
    return strcat(zeichenkette, rhs.zeichenkette);
    }

    void String::print()
    {
    cout << zeichenkette << endl;
    }



  • String s1("hello "), s2("world"), s3; //strlen(s1) == 6 strlen(s2) == 5
    s3 = s1 + s2; //Nun wird versucht an die 6 Zeichen von s1 noch 5 anzuhängen -> Segmentation Fault
    s1.print();
    


  • Bei Klassen, die mit new/delete hantieren, braucht man außerdem einen Zuweisungsoperator und einen Kopierkonstruktor -> Buch oder Tutorial. Da kannst du auch gucken, ob die Regel der Großen Drei erwähnt wird.


Anmelden zum Antworten