Vorstellung Fraction Klasse
-
Firefighter schrieb:
Weiterhin wollte ich fragen was ich alles ändern müsste oder ob es überhaupt Sinn macht wenn ich das ganze als Template machen.
Macht absolut Sinn. Allerdings sollte für diesen Schritt die jetzige Klasse erstmal einwandfrei funktionieren.
Badestrand schrieb:
Ui, den unären Operator '+' kannte ich gar nicht - sollte der einfach "leer" implementiert werden?
Nein, schliesslich muss der ja etwas zurückgeben. Eine Möglichkeit wäre folgende:
Fraction operator +() const { return Fraction(+zaehler, nenner); }@Firefighter
Noch ein Tipp, binäre Non-Assignment Operatoren solltest du ausserhalb der Klasse, im Namensraum definieren. Notfalls in der Klasse als friend deklarieren, falls du auf non-public Member zugreifen möchtest. Nur mal ein Beispiel, was gegen Member-Funktionen spricht:Fraction(1, 3) * 1.5 1.5 * Fraction(1, 3)
-
Ok danke an alle für eure Meinung, besonderen Dank an camper für seine Professionelle Einschätzung und Meinung
Werde mich wahrscheinlich bei Fragen noch öfters melden.
-
groovemaster schrieb:
Noch ein Tipp, binäre Non-Assignment Operatoren solltest du ausserhalb der Klasse, im Namensraum definieren. Notfalls in der Klasse als friend deklarieren, falls du auf non-public Member zugreifen möchtest.
Oder einfach über die Assignment-Operatoren:
Fraction operator+( const Fraction& frac, const float val ) { Fraction ret( frac ); ret += val; return ret; }So bleibt die Logik in der Klasse; und Redundanz und so.
-
Fraction& Fraction::operator +=(const Fraction& rhs) { *this = *this + rhs; return *this; }Oft sieht man es aber, dass es genau andersrum gemacht wird: Der += operator definiert das Verhalten und der + operator ruft intern den += operator auf.
Gruß
Don06
-
Echt? Das hab ich so noch nie gesehen.. Naja, so oder so ist m.M.n. aber Hauptsache, dass "wirklich"-operierende Teil in der Klasse ist, die quasi-Wrapper können draußen bleiben.
-
Don06 schrieb:
Fraction& Fraction::operator +=(const Fraction& rhs) { *this = *this + rhs; return *this; }Von diesem Code solltest Du absehen: da wird eine überflüssige temporäre Kopie erstellt. Andersherum wird ein Schuh draus.
-
nt
-
Konrad Rudolph schrieb:
Don06 schrieb:
Fraction& Fraction::operator +=(const Fraction& rhs) { *this = *this + rhs; return *this; }Von diesem Code solltest Du absehen: da wird eine überflüssige temporäre Kopie erstellt. Andersherum wird ein Schuh draus.
Hab ich nicht darauf hingewiesen, dass es oft andersrum gemacht wird?
-
Don06 schrieb:
Konrad Rudolph schrieb:
Don06 schrieb:
Fraction& Fraction::operator +=(const Fraction& rhs) { *this = *this + rhs; return *this; }Von diesem Code solltest Du absehen: da wird eine überflüssige temporäre Kopie erstellt. Andersherum wird ein Schuh draus.
Hab ich nicht darauf hingewiesen, dass es oft andersrum gemacht wird?
Ja, aber wieso überhaupt diesen irreführenden Code zeigen? Badestrand zumindest hast Du auch erfolgreich verwirrt (oder bezog sich das auf was anderes?).
-
Konrad Rudolph schrieb:
Badestrand zumindest hast Du auch erfolgreich verwirrt (oder bezog sich das auf was anderes?).
Jau, ich hatte den Satz darunter irgendwie falsch gedeutet
Don, du hast anderen Code gezeigt und dann was von "andersrum" gesagt, das war einfach zu viel für mich 