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 ...


  • Mod

    #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.


Anmelden zum Antworten