bruch_klasse
-
Nabend :xmas1:
3 ist vom Typ long. 2/4 ist vom Typ bruch.Macht so eine Zuweisung Sinn, wenn es überhaupt möglich ist:

3 += 2/4;
-
glaube eher nicht da dir long keine Nachkommastellen angibt.
Gruß Tobi.
-
? Naja sicherlich kann man sich eine "Bruch-Klasse" schreiben, die Nenner und Zähler verwaltet.
Aja ein x / y ist genau das, was da steht. x : y, wie es in der Schule gelernt wird

-
Erstmal tnx für die schnellen Antworten.
Hab die Frage vllt. zu allgemein formuliert, etwas konkreter:
long z=3; Bruch b1(2, 4); // z = z + b1; z += b1;3 += 2/4, Ergebnis sind 7/2
Sollte/Kann z jetzt in den Typ Bruch gewandelt werden, oder ist das eher unüblich?
-
? nee in z steht danach 3 ... du kannst höchstens so machen:
fraction tmp(2, 4); tmp += 3L;dann würdest du einfach den operator+= für long überladen ...
-
#smY schrieb:
Erstmal tnx für die schnellen Antworten.
Hab die Frage vllt. zu allgemein formuliert, etwas konkreter:
long z=3; Bruch b1(2, 4); // z = z + b1; z += b1;3 += 2/4, Ergebnis sind 7/2
Sollte/Kann z jetzt in den Typ Bruch gewandelt werden, oder ist das eher unüblich?
Wenn ich die Frage richtig verstehe, möchtest du wissen, ob es eine gute Idee ist, als Ergebnis des += Operators einen Bruch zu erhalten an Stelle eines Verweises auf z (das seinen Inhalt nicht geändert haben dürfte). Das widerspricht in meinen Augen dem Prinzip der geringsten Überraschung.
Generell erwarte ich, dass es keine Rolle spielt, ob ich:func(foo+=bar); // oder foo+=bar; func(foo);schreibe, das wäre dann aber der Fall.
-
Wenn du mit Brüchen arbeiten willst, solltest du auch alle Werte als Bruch definieren - zur Laufzeit kann die Variable ihren Typ nicht mehr verändern (eigentlich schon - aber diese Variante spielt hier keine Rolle), d.h. z wird auf Lebenszeit ein long bleiben - und nur ganze Zahlen verwalten können.
Du könntest eventuell noch ein wenig an dem operator+= schrauben (Rundung o.ä.), aber egal was du machst, wird niemals ein "7/2" in deinen "long z;" reinpassen.
(D)Evil schrieb:
? nee in z steht danach 3 ... du kannst höchstens so machen:
fraction tmp(2, 4); tmp += 3L;dann würdest du einfach den operator+= für long überladen ...
Dafür mußt du nichtmal die Rechenoperatoren überladen
Es reicht, der Klasse fraction einen long-Ctor zu verpassen, dann wird die 3l implizit umgewandelt und kann an den "internen" Operator übergeben werden.