std::string nachprogrammieren?
-
prolog schrieb:
Hallo,
das lässt sich lösen in dem nu beim Operator eine Referenz auf das Object zurück gibst.
const MyClass &MyClass::operator+(const MyClass &c){ //addition return *this; }
op+ doch bitte nicht als Member!
Was erwartest Du Dir denn von
MyIntClass a = 4; a+1; cout << a;
Doch wohl nicht 5, oder?
-
Jester schrieb:
op+ doch bitte nicht als Member!
Warum nicht? Nehmen wir an der ctor ist explicit...
-
Hast Du das Beispiel gelesen?
-
Ja, und weiter? Was macht jetzt dein operator+?
-
Dann versteh's doch bitte noch.
So wie prolog das beschrieben hatte wird beia+5;
a verändert. Und das ist vollkommen unerwartet. Also wenn schon, dann ein neues Objekt zurückgeben, keine Referenz. Das bitte nur beim op= oder den op+= und Konsorten.
So, warum jetzt kein Member?
Weil dann auf dem linken Parameter keine Konvertierung durchgeführt werden kann.Warum sollte denn
"Hallo"+5; erlaubt sein, aber 5+"Hallo" nicht?
MfG Jester
-
Irgendwie erzählst du mir nicht Neues, denn das wurde von mir bereits oben gepostet...
Warum sollte denn
"Hallo"+5; erlaubt sein, aber 5+"Hallo" nicht?
macht keinen Sinn, warum sollte ich einen String-Literal mit einem int addieren? Zudem muss beim Überladen von Operatoren, einer der Parameter von Class-Type sein.
-
Es ist so, wenns dich interessiert warum ließ ecp kapitel 23...
class myclass { friend myclass operator + (const myclass& lhs, const myclass& rhs); }; myclass operator + (const myclass& lhs, const myclass& rhs) { myclass ret; // ret = lhs + rhs return(ret); }
So schauts aus.
MfG SideWinder
-
SideWinder schrieb:
So schauts aus.
Du auch nicht...
-
Hallo,
@alle Nachposter
Sry habs mit dem Zuweisungsoperator verwechselt.
-
Shlo schrieb:
SideWinder schrieb:
So schauts aus.
Du auch nicht...
Warum er kein Member sein soll ist doch irgendwo klar. Nehmen wir an ein CTor ist nicht explicit (ist ja sehr oft der Fall), dann gibts plötzlich Probleme die mit einem globalen op nicht passieren.
MfG SideWinder
-
gelöscht
-
Shlo schrieb:
Warum sollte denn
"Hallo"+5; erlaubt sein, aber 5+"Hallo" nicht?
macht keinen Sinn, warum sollte ich einen String-Literal mit einem int addieren? Zudem muss beim Überladen von Operatoren, einer der Parameter von Class-Type sein.
Oh bitte, Hirn einschalten und dann posten. Das war ein Beispiel!
Stell Dir vor, int würde nach string konvertiert werden...
-
Jester schrieb:
Oh bitte, Hirn einschalten und dann posten. Das war ein Beispiel!
Stell Dir vor, int würde nach string konvertiert werden...Wozu? Der Code ist doch super.
Warum sollte man " hallo"+1 rechnen wollen? vielleicht um "hallo" zu erhalten?
aber der hauptpunkt ist ja (nochmal für die langsameren)
a+b;
ist legaler code
und
b+a;
nichtfinde ich persönlich verwirrend.
denn mir hat man immer gesagt
a+b == b+a
-
Shade Of Mine schrieb:
denn mir hat man immer gesagt
a+b == b+aDann ist der operator+ für std::string aber falsch...
... *sich der allgemeinen Klugscheißerei anschließ* sorry
-
operator void schrieb:
Dann ist der operator+ für std::string aber falsch...
Exakt. + ist für das zusammenhängen von strings nicht wirklich geeignet. Man bräuchte einen eigenen Operator dafür.
-
string sind, aber keine built-in Typen und somit geht das schlecht, gleiches gilt für die streams.
-
Shade Of Mine schrieb:
operator void schrieb:
Dann ist der operator+ für std::string aber falsch...
Exakt. + ist für das zusammenhängen von strings nicht wirklich geeignet. Man bräuchte einen eigenen Operator dafür.
Imho ist ein solcher Missbrauch erlaubt, und wie bereits erwähnt: Stream-Operatoren erledigen ja auch kein Bitshifting. Ich hätte noch nicht einmal ein Problem damit wenn jemand den ^-Operator für eine Rational-Klasse überlädt und ihn fürs Quadrieren misbraucht.
Ein klein wenig Spaß darf sein.
MfG SideWinder
-
Jester schrieb:
Shlo schrieb:
Warum sollte denn
"Hallo"+5; erlaubt sein, aber 5+"Hallo" nicht?
macht keinen Sinn, warum sollte ich einen String-Literal mit einem int addieren? Zudem muss beim Überladen von Operatoren, einer der Parameter von Class-Type sein.
Oh bitte, Hirn einschalten und dann posten. Das war ein Beispiel!
Stell Dir vor, int würde nach string konvertiert werden...Wie passend, int in string und auch noch implizit... Viellecht solltest du deinen Hirn einschalten...
-
Shlo schrieb:
Jester schrieb:
Shlo schrieb:
Warum sollte denn
"Hallo"+5; erlaubt sein, aber 5+"Hallo" nicht?
macht keinen Sinn, warum sollte ich einen String-Literal mit einem int addieren? Zudem muss beim Überladen von Operatoren, einer der Parameter von Class-Type sein.
Oh bitte, Hirn einschalten und dann posten. Das war ein Beispiel!
Stell Dir vor, int würde nach string konvertiert werden...Wie passend, int in string und auch noch implizit... Viellecht solltest du deinen Hirn einschalten...
Irgendwie scheint jedem, außer dir, klar zu sein, dass es sich hier nur um ein Beispiel handelte
-
Shlo schrieb:
Wie passend, int in string und auch noch implizit... Viellecht solltest du deinen Hirn einschalten...
Nochmal für die ganz dummen:
BigInt128 a=10;
BigInt256 b=5;cout<< (a+b);
//gibt 15 aus
cout<< (b+a);
//ist ein compiler fehlerIst es jetzt auch dir klar??