Konstruktorliste



  • Davon abgesehen finde ich eine Überprüfung des Nenners auf 0 für unnötig. Und die Zuweisung so gar für falsch.
    Biete doch lieber eine freie Funktion an:

    bool is_nan(const Bruch& value)
    {
      return value.get_nenner() == 0;
    }
    

    wenn dir so ist, als ob vor einer rechenoperation geprüft werden sollte, kannst du die funktion dort aufrufen und eine fehlermeldung (evtl. nur im debugmode) ausgeben, es korrigieren oder dich einfach gar nicht darum kümmern.
    wenn ich 2 integer dividieren will, muss ich den divisor auch auf 0 prüfen, wenn ich nicht möchte, dass da was schief geht.

    bb



  • Wenn, dann mach doch gleich einen statischen Member:

    static const Bruch NaN(0, 0);
    


  • 314159265358979 schrieb:

    Wenn, dann mach doch gleich einen statischen Member:

    static const Bruch NaN(0, 0);
    

    Quark, mal wieder, leider.

    Dann zahlste ganz ohne Not im op== drauf.



  • ???



  • 314159265358979 schrieb:

    Wenn, dann mach doch gleich einen statischen Member:

    static const Bruch NaN(0, 0);
    

    Ich würde sowas gar nicht erst zulassen. Finde es sehr fragwürdig was der Threadsteller da macht wenn ich 0 als Nenner übergebe. An solchen Stellen sollte man nicht versuchen Logik-Fehler auszumerzen, sondern knallhart nen Fehler werfen.



  • 314159265358979 schrieb:

    Wenn, dann mach doch gleich einen statischen Member:

    static const Bruch NaN(0, 0);
    

    und dann hat man was gekonnt?
    op== kann man nicht nehmen, weil dort (außer bei sonderfällen) zaehler und nenner übereinstimmen müssen, NaN ists aber immer, wenn der nenner 0 ist.



  • Ich vesteh eure Einwände überhaupt nicht.



  • 314159265358979 schrieb:

    Ich vesteh eure Einwände überhaupt nicht.

    dann zeig mal genau, was du mit dem statischen member vor hast.



  • Was soll ich denn groß damit vorhaben? Ist das nicht offensichtlich?



  • 314159265358979 schrieb:

    Was soll ich denn groß damit vorhaben? Ist das nicht offensichtlich?

    entweder du hast nen denkfehler oder bisher hat einfach niemand erkannt, wie toll dein super vorschlag ist, weil es doch nicht so offensichtlich ist.



  • 314159265358979 schrieb:

    ???

    Der Bruch ist genau dann NaN, wenn sein Nenner 0 ist. Du zahlst im operator== drauf, weil du nicht mehr einfach Nenner und Zähler auf Gleichheit prüfen kannst, sondern du ihn so oder ähnlich implementieren musst:

    bool operator== (Bruch lhs, Bruch rhs)
    {
       return lhs.nenner() == 0 && rhs.nenner() == 0 // beide NaN
           || lhs.nenner() == rhs.nenner() && lhs.zaehler() == rhs.zaehler();
    }
    

    Davon abgesehen, dass zwei NaNs nie gleich sind...



  • Danke Leute!

    Ihr habt mir doch einiges weitergeholfen! Das Problem was ich mit der Konstruktorliste hatte, hab ich soweit beseitigt.

    Danke!


Anmelden zum Antworten