<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Falsche Operator+ Methode]]></title><description><![CDATA[<p>Bezugnehmend auf diese Thread :</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-212214.html" rel="nofollow">URL *URLptr;</a></p>
<p>Habe ich folgendes Problem. Wenn ich den Operator+ für ein native Werte und ein Fraction Objekt überladen will, also sowas hier:</p>
<pre><code class="language-cpp">fraction1 + 0.5
//oder
fraction + 2
</code></pre>
<p>Rechnet meine Überladene Funktion bis jetzt noch Falsch denn sie bekommt ja einen normalen Float übergeben somit weiß sie ja nicht den den Zähler oder/und Nenner.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const float right)const
{
    Fraction result( zaehler * right + right * nenner, nenner * right );
    result.kuerzen();
    return result;
}
</code></pre>
<p>Das ist der Überladene Operator. Nur dieser bekommt wenn ich fracttion +2 mache ja nur diese 2,also kann ich ihm nicht sagen &quot;multipliziere den zähler mit dem nenner des anderen bruches und addiere ihn mit dem produkt aus nenner mit dem zähler des anderen nenners&quot; wie hier</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const Fraction &amp;right)const
{
    Fraction result( zaehler * right.nenner + right.zaehler * nenner, nenner * right.nenner );

    result.kuerzen();
    return result;
}
</code></pre>
<p>Wie kann ich nun eine gescheite operator+ methode schreiben die wirklich richtig rechnet, weil zurzeit kommen falsch ergebnisse raus.</p>
<p>Danke für eure Mühe zu dieser Späten Stunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212263/falsche-operator-methode</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 16:43:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212263.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 May 2008 21:08:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Falsche Operator+ Methode on Sat, 03 May 2008 21:08:20 GMT]]></title><description><![CDATA[<p>Bezugnehmend auf diese Thread :</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-212214.html" rel="nofollow">URL *URLptr;</a></p>
<p>Habe ich folgendes Problem. Wenn ich den Operator+ für ein native Werte und ein Fraction Objekt überladen will, also sowas hier:</p>
<pre><code class="language-cpp">fraction1 + 0.5
//oder
fraction + 2
</code></pre>
<p>Rechnet meine Überladene Funktion bis jetzt noch Falsch denn sie bekommt ja einen normalen Float übergeben somit weiß sie ja nicht den den Zähler oder/und Nenner.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const float right)const
{
    Fraction result( zaehler * right + right * nenner, nenner * right );
    result.kuerzen();
    return result;
}
</code></pre>
<p>Das ist der Überladene Operator. Nur dieser bekommt wenn ich fracttion +2 mache ja nur diese 2,also kann ich ihm nicht sagen &quot;multipliziere den zähler mit dem nenner des anderen bruches und addiere ihn mit dem produkt aus nenner mit dem zähler des anderen nenners&quot; wie hier</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const Fraction &amp;right)const
{
    Fraction result( zaehler * right.nenner + right.zaehler * nenner, nenner * right.nenner );

    result.kuerzen();
    return result;
}
</code></pre>
<p>Wie kann ich nun eine gescheite operator+ methode schreiben die wirklich richtig rechnet, weil zurzeit kommen falsch ergebnisse raus.</p>
<p>Danke für eure Mühe zu dieser Späten Stunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502820</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 03 May 2008 21:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Falsche Operator+ Methode on Sat, 03 May 2008 21:56:51 GMT]]></title><description><![CDATA[<p>Wie Tachyon doch schon geschrieben hat, macht diese Überladung keinen Sinn (denn entweder du rechnest mit Brüchen, d.h. Zahler und Nenner sind nur ganze Zahlen), oder aber du verwendest in einem Programm nur Fließkommazahlen.</p>
<p>Es gibt außerdem keinen eindeutigen Algorithmus, um aus einer Fließkommazahl einen (exakten) Bruch zu bestimmen (bzw. die Genauigkeit würde die Grenzen eines ints sprengen, z.B. 1.0e-10 = 1 / 1.0e10 = 1 / 10 000 000 000).</p>
<p>Und für ganze Zahlen brauchst du die Operatoren auch nicht überladen, da der Konstruktor</p>
<pre><code class="language-cpp">Fraction(int z, int n=1) // mit Standardparameter
</code></pre>
<p>dafür ausreicht, damit der Compiler die nötigen Konvertierungen selber durchführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502838</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 03 May 2008 21:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Falsche Operator+ Methode on Sun, 04 May 2008 09:06:40 GMT]]></title><description><![CDATA[<p>Ich würd einen float zurückgeben bzw. einen double:</p>
<pre><code class="language-cpp">double operator+ (Fraction const&amp; frac, double d) {
  d += (1.0* frac.zaehler)/frac.nenner;
  return d;
}

double operator+ (double d, Fraction const&amp; frac) {
  return frac+d;
}
</code></pre>
<p>die binären operatoren +,-,*,/ würd ich eigentlich immer als freie Funktionen implementieren, um implizite Konvertierungen des ersten Operanden zu erlauben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502926</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 04 May 2008 09:06:40 GMT</pubDate></item></channel></rss>