operator, wie würd besser funktionieren
-
ich habe als Übung eine einfache String Klasse
geschrieben und dort den Operator+ überladenalso zb so
String eins; String zwei( "fo" ); String drei( "-bar" ); eins = zwei + drei;
eins sollte dann natürlich "fo-bar" enthalten
meine Frage:
könnte ich das nicht etwas besser schreiben oder wie findet ihr es?String& String::operator+ ( const String &s) const { char *cstring; int size = _size + s._size; cstring = new char[size + 1]; strcpy(cstring, _string); cstring = strcat(cstring, s._string); String *tmp = new String( cstring ); return *tmp; }
:xmas1:
-
und wie würdest du jetzt deinen op+= schreiben?
http://tutorial.schornboeck.net/operatoren_ueberladung.htm
geht darauf ein, einfach zum op+ runterscrollen.
-
Könnte man nicht einfach ein Objekt der Klasse zurückgeben (bin c++ Noob, also seit lieb zu meiner Lösung):
Hab bewusst das String anhängen selber geschrieben zu Übungszwecken.
Message Message::operator + (Message test){ int i=0; int j=0; while(text[i]!='\0') i++; while((text[i++]=test.text[j++])!='\0'); return Message(text); }
-
Ich muss nach dazuschreiben:
ich hab ja jetzt ohne eine Referenz (&) gearbeitet, ist das so korrekt ? Was ist der Nachteil ?
-
Cassis schrieb:
Ich muss nach dazuschreiben:
ich hab ja jetzt ohne eine Referenz (&) gearbeitet, ist das so korrekt ? Was ist der Nachteil ?mehr kopien. allerdings bin ich mir jetzt nicht sicher, welche referenz du meinst. der OP lässt ja auch eine referenz zurückgeben. wenn du das meinst, das war blödsinn. parameterübergabe per referenz ist schon ok.
allerdings glaube ich nicht, dass dein operator+ das macht, was du gerne willst (bzw. mehr macht, als dir lieb ist)
-
Cassis schrieb:
Könnte man nicht einfach ein Objekt der Klasse zurückgeben
Üblicherweise macht man das so bei den non-assignment Operatoren.
user123's Lösung sollte man eigentlich nicht der Öffentlichkeit zugänglich machen, sonst gucken sich Anfänger da noch was ab.
Eine sinnvolle Möglichkeit so einen Operator zu implementieren, ist dies ausserhalb der Klasse über den entsprechenden Assignment Operator zu machen.T operator +(const T& lhs, const T& rhs) { T tmp(lhs); tmp += rhs; return tmp; }
Und wenn's eine gute String Klasse werden soll, dann sollte man sich von diesen C-String Relikten lösen und auf Funktionen wie strcpy oder strcat verzichten. Die sind nur noch was für C Programmierer.
-
groovemaster schrieb:
Und wenn's eine gute String Klasse werden soll, dann sollte man sich von diesen C-String Relikten lösen und auf Funktionen wie strcpy oder strcat verzichten. Die sind nur noch was für C Programmierer.
Meinst du also intern eine andere Datenstruktur also zB: eine Liste zu verwenden oder sowas in der Art statt die char arrays ??? kannst mir das genauer erklären
-
Lies dir mal diesen Thread durch. Da ist sicherlich einiges an Denkanstössen dabei. Du solltest dir den Thread aber wirklich ganz durchlesen, da gerade im zweiten Teil einige interessante Sachen stehen.