Zwei Zeichenketten aneinander hängen (Operatorüberladung )



  • Hi,

    also ich habe folgendes Problem und zwar will ich den Operator + überladen so das immer wenn ich in der Main z.B

    c=a+b;
    

    schreibe das dann a und b aneinander gehängt werden, das geht auch so weit aber ich will ,das a auch noch den selben Inhalt hat als vorher also
    z.b
    in a steht "Hallo"
    in b steht "Wie gehts?"

    und nur in c soll stehen: "Hallo wie gehts?" in a und b weiterhin das selbe

    bis jetzt habe ich es so:

    String& String::operator+ (const String& s)
    {
    
    	strcat(string, s.string);
    
    	return *this;
    }
    

    da steht das dann immer in a "Hallo wie gehts?".
    ich komme einfach nicht drauf wie das anderst geht

    Ich hoffe ihr versteht was ich meine

    mfg



  • kein schrieb:

    ...
    in a steht "Hallo"
    in b steht "Wie gehts?"

    und nur in c soll stehen: "Hallo wie gehts?" ...

    Das wird sooo (einfach) nicht gehen ... jedenfalls nicht, wenn das 'w' klein sein soll. 😉

    Ansonsten ist's aber extrem easy:

    string a = "Hallo";
    string b = " wie geht's ?";
    string c = a + b;
    
    cout << c;
    

    Ergo: Gibt's schon und funktioniert prima und ganz ohne unsichere Funktionen wie strcat()....

    Gruß,

    Simon2.



  • Z. Bsp. so

    String String::operator+ (const String& s)
    {
        String temp(*this);   
        strcat(temp.string, s.string);
        return temp;
    }
    


  • Vielen Dank für die Antworten funktioniert super

    @simon2 ich muss operatorüberladung machen daher selber die klasse string machen



  • aber noch ne frage dazu geht das auch irgendwie mit einem Array also anstatt
    String temp(*this);
    z.B char temp[100]...



  • Es wäre evtl. besser den operator+ außerhalb der Klasse zu implementieren. Noch besser ist es dies über einen, in der Klasse implementierten, operator+= zu machen.



  • kein schrieb:

    ...ich muss operatorüberladung machen daher selber die klasse string machen

    Sorry, was soll dieser Satz ausdrücken ? 😕

    Gruß,

    Simon2.



  • ok Danke

    @simon2
    also ich soll es nicht einfach mit Strings machen sondern ich soll 2 Char Arrays aneinander ketten wenn ich in der Main Array1+Array2 eingebe normalerweise gibt es ja ein Fehler. Daher muss ich den Operator+ überladen.
    z.B
    String String::operator+ (const String& s)
    {
    .....
    }

    und nicht einfach zwei Srings verketten



  • Simon2 schrieb:

    kein schrieb:

    ...ich muss operatorüberladung machen daher selber die klasse string machen

    Sorry, was soll dieser Satz ausdrücken ? 😕

    Vermutlich daß es um Hausaufgaben geht - eine eigene Stringklasse ohne STL-Hilfe zu schreiben.

    @kein: strcat() entspricht eher einem op+=. Wenn du den Urspungsstring nicht angreifen willst, mußt du seine Daten erst umkopieren.



  • schau dir evtl. auch mal den post von CStoll in diesem Thread an: http://www.c-plusplus.net/forum/viewtopic-var-t-is-198494.html Da gehts zwar um int, aber wie CStoll sagt kann man op+= gut mir strcat machen und dann wie dort beschrieben op+ einfach durch += ausdruecken.



  • kein schrieb:

    ...
    @simon2
    also ich soll es nicht einfach mit Strings machen sondern ich soll 2 Char Arrays aneinander ketten wenn ich in der Main Array1+Array2 eingebe normalerweise gibt es ja ein Fehler. ...

    Sorry, aber ohne Satzzeichen verstehe ich sowas nicht.

    Gruß,

    Simon2.



  • Vielen Dank für eure Antworten ich habe es jetzt mit dem += Operator gemacht

    mfg


Anmelden zum Antworten