<?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[Problem bei eigener Rationalklasse]]></title><description><![CDATA[<p>Morgen hier erstmal mal mein Code.</p>
<p>Fraction.h</p>
<pre><code class="language-cpp">#ifndef FRACTION_H_INCLUDED
#define FRACTION_H_INCLUDED

    class Fraction
    {
        private:
                int zaehler;
                int nenner;
        public:

        Fraction(int z,int n);              ///Konstruktor
        void operator+(Fraction fraction);
        void operator-(Fraction fraction);
        void operator*(Fraction fraction);
        friend std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f);
        ///Getter un Setter für zaehler
        int get_zaehler()const;
        void set_zaehler(int z);
        ///Getter und Setter für nenner
        int get_nenner()const;
        void set_nenner(int n);

        ///Methoden zum bearbeiten des &quot;Bruches&quot;
        void kuerzen();
        int ggT(int a,int b);

};

#endif // FRACTION_H_INCLUDED
</code></pre>
<p>Fraction.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Fraction.h&quot;

Fraction::Fraction(int z,int n)
{
    zaehler = z;
    nenner = n;

    kuerzen();
}
////////////////////////////////////////
int Fraction::get_zaehler()const
{
    return zaehler;
}
void Fraction::set_zaehler(int z)
{
    zaehler = z;
}
////////////////////////////////////////
int Fraction::get_nenner()const
{
    return nenner;
}
void Fraction::set_nenner(int n)
{
    nenner = n;
}
////////////////////////////////////////
int Fraction::ggT(int a,int b)
{
    while(b != 0)
    {

        int temp = a%b;
        a = b;
        b = temp;
    }
    return a;
}

/////////////////////////////////////////
void Fraction::kuerzen()
{

    int ggt = Fraction::ggT(Fraction::get_zaehler(),Fraction::get_nenner());

    Fraction::set_zaehler(Fraction::get_zaehler() / ggt);
    Fraction::set_nenner(Fraction::get_nenner() / ggt);

}

/////////////////////////////////////////////
void Fraction::operator+(Fraction fraction)
{

    fraction.set_zaehler(fraction.get_zaehler()*nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler*fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner *fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner()*nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler+fraction.get_zaehler();                        // Addition der beiden neuen Zähler
    kuerzen();
}
///////////////////////////////////////////////
void Fraction::operator-(Fraction fraction)
{
    fraction.set_zaehler(fraction.get_zaehler() * nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler * fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner * fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner() * nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler-fraction.get_zaehler();                        // Subtraktion der beiden neuen Zähler
    kuerzen();
}
//////////////////////////////////////////////
void Fraction::operator*(Fraction fraction)
{
    zaehler = zaehler * fraction.get_zaehler();
    nenner = nenner * fraction.get_nenner();

    kuerzen();
}
//////////////////////////////////////////////
std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f)
{
    return ostr&lt;&lt;f.get_zaehler()&lt;&lt;&quot;/&quot;&lt;&lt;f.get_nenner();
}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Fraction.h&quot;

using namespace std;

int main()
{
    Fraction fraction1(1,2);
    Fraction fraction2(3,2);

    fraction1+fraction2;
    cout&lt;&lt;fraction1&lt;&lt;endl;
    fraction1-fraction2;
    cout&lt;&lt;fracion1&lt;&lt;endl;

}
</code></pre>
<p>Ich bedanke mich jetzt schon mal bei allen, die es sich antuen, meinen code zu lesen.</p>
<p>Aber hier mein Problem.<br />
Zurzeit verändere ich bei der Addition,Subtraktion,Multiplikation immer meine Original &quot;Brüche&quot;. Das will ich aber nicht, weil wenn ich meinen Bruch zuerst Addiere und danach Subtrahieren will, rechne ich ja mit falschen Werten weiter. Wie kann ich es also schaffen, die Original, die ich meinem Konstruktor am anfang übergebe zu behalten und diese nicht zu verändern? Weil ich sonst ja nicht richtig weiterrechnen kann.</p>
<p>EDIT: Bitte noch nicht so viel Kritisieren, das wollte ich machen lassen, wenn alles fertig ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211192/problem-bei-eigener-rationalklasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:52:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211192.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Apr 2008 10:06:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 10:09:36 GMT]]></title><description><![CDATA[<p>Morgen hier erstmal mal mein Code.</p>
<p>Fraction.h</p>
<pre><code class="language-cpp">#ifndef FRACTION_H_INCLUDED
#define FRACTION_H_INCLUDED

    class Fraction
    {
        private:
                int zaehler;
                int nenner;
        public:

        Fraction(int z,int n);              ///Konstruktor
        void operator+(Fraction fraction);
        void operator-(Fraction fraction);
        void operator*(Fraction fraction);
        friend std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f);
        ///Getter un Setter für zaehler
        int get_zaehler()const;
        void set_zaehler(int z);
        ///Getter und Setter für nenner
        int get_nenner()const;
        void set_nenner(int n);

        ///Methoden zum bearbeiten des &quot;Bruches&quot;
        void kuerzen();
        int ggT(int a,int b);

};

#endif // FRACTION_H_INCLUDED
</code></pre>
<p>Fraction.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Fraction.h&quot;

Fraction::Fraction(int z,int n)
{
    zaehler = z;
    nenner = n;

    kuerzen();
}
////////////////////////////////////////
int Fraction::get_zaehler()const
{
    return zaehler;
}
void Fraction::set_zaehler(int z)
{
    zaehler = z;
}
////////////////////////////////////////
int Fraction::get_nenner()const
{
    return nenner;
}
void Fraction::set_nenner(int n)
{
    nenner = n;
}
////////////////////////////////////////
int Fraction::ggT(int a,int b)
{
    while(b != 0)
    {

        int temp = a%b;
        a = b;
        b = temp;
    }
    return a;
}

/////////////////////////////////////////
void Fraction::kuerzen()
{

    int ggt = Fraction::ggT(Fraction::get_zaehler(),Fraction::get_nenner());

    Fraction::set_zaehler(Fraction::get_zaehler() / ggt);
    Fraction::set_nenner(Fraction::get_nenner() / ggt);

}

/////////////////////////////////////////////
void Fraction::operator+(Fraction fraction)
{

    fraction.set_zaehler(fraction.get_zaehler()*nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler*fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner *fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner()*nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler+fraction.get_zaehler();                        // Addition der beiden neuen Zähler
    kuerzen();
}
///////////////////////////////////////////////
void Fraction::operator-(Fraction fraction)
{
    fraction.set_zaehler(fraction.get_zaehler() * nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler * fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner * fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner() * nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler-fraction.get_zaehler();                        // Subtraktion der beiden neuen Zähler
    kuerzen();
}
//////////////////////////////////////////////
void Fraction::operator*(Fraction fraction)
{
    zaehler = zaehler * fraction.get_zaehler();
    nenner = nenner * fraction.get_nenner();

    kuerzen();
}
//////////////////////////////////////////////
std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f)
{
    return ostr&lt;&lt;f.get_zaehler()&lt;&lt;&quot;/&quot;&lt;&lt;f.get_nenner();
}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Fraction.h&quot;

using namespace std;

int main()
{
    Fraction fraction1(1,2);
    Fraction fraction2(3,2);

    fraction1+fraction2;
    cout&lt;&lt;fraction1&lt;&lt;endl;
    fraction1-fraction2;
    cout&lt;&lt;fracion1&lt;&lt;endl;

}
</code></pre>
<p>Ich bedanke mich jetzt schon mal bei allen, die es sich antuen, meinen code zu lesen.</p>
<p>Aber hier mein Problem.<br />
Zurzeit verändere ich bei der Addition,Subtraktion,Multiplikation immer meine Original &quot;Brüche&quot;. Das will ich aber nicht, weil wenn ich meinen Bruch zuerst Addiere und danach Subtrahieren will, rechne ich ja mit falschen Werten weiter. Wie kann ich es also schaffen, die Original, die ich meinem Konstruktor am anfang übergebe zu behalten und diese nicht zu verändern? Weil ich sonst ja nicht richtig weiterrechnen kann.</p>
<p>EDIT: Bitte noch nicht so viel Kritisieren, das wollte ich machen lassen, wenn alles fertig ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494944</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 10:09:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 10:26:53 GMT]]></title><description><![CDATA[<p>Du musst ein temporäres Bruch-Objekt in Deinen operator-Funktionen anlegen und das dann zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494953</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 10:26:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 10:43:24 GMT]]></title><description><![CDATA[<p>Und zusätzlich sollten die Operationen dann auch 'const' sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494961</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 20 Apr 2008 10:43:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 11:03:00 GMT]]></title><description><![CDATA[<p>Das sieht dann ungefähr so aus:</p>
<pre><code class="language-cpp">Fraction Fraction::operator*(Fraction const &amp;rhs) const
{
    Fraction result(zaehler*rhs.zaehler, nenner*rhs.nenner);
    result.kuerzen();
    return result;
}
</code></pre>
<p>(Musst natürlich auch die Deklaration in der Klasse anpassen). Das const hinter dem Methodenkopf bedeutet, dass die Methode auch für konstante Objekte der Klasse aufgerufen werden kann, was ja sinnvoll ist, weil die Methode nichts an dem Original-Objekt ändert.</p>
<p>Normalerweise verwendet man für die interne Implementierung übrigens keine getter und setter Methoden, sondern greift (so wie da oben) direkt auf die Member zu... Ist im Endeffekt aber Geschmackssache.</p>
<p>Außerdem würde man für eine reale Implpementierung den operator*, +, /, etc. nicht als Methoden, sondern als Funktionen implementieren, denn wenn du z.B. eine automatische Konvertierung von int nach Fraction zulässt (mit einem einparametrigen Konstruktor), dann kann bei einer Methode ein Fraction mit einem int addiert werden, aber kein int mit einem Fraction...</p>
<p>Das ganze sähe dann so aus:</p>
<pre><code class="language-cpp">Fraction operator*(Fraction const &amp;lhs, Fraction const &amp;rhs) 
{
    Fraction result(lhs.get_zaehler()*rhs.get_zaehler(), lhs.get_nenner()*rhs.get_nenner());
    result.kuerzen();
    return result;
}
</code></pre>
<p>Jetzt muss man natürlich getter und setter verwenden, weil eine (globale) Funktion ja keinen Zugriff auf die Member hat, es sei denn du deklarierst sie als friend.</p>
<p>Das sollte alle Klarheiten beseitigt haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494973</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Sun, 20 Apr 2008 11:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 11:34:10 GMT]]></title><description><![CDATA[<p>ohh danke Felix, aber wie würde das bei meinem operator+ aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494988</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 11:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 11:35:07 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>ohh danke Felix, aber wie würde das bei meinem operator+ aussehen?</p>
</blockquote>
<p>Genau so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494990</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 11:35:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 11:40:36 GMT]]></title><description><![CDATA[<p>ja schon klar...nur er übergibt ja dem konstruktor in der operator* methode die werte der zaehler und nenner, aber beim operator+ muss ich die doch vorher noch überarbeiten, soll ich sie einfach am ende an den konstruktor übergeben oder wie jetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494997</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 11:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 12:07:58 GMT]]></title><description><![CDATA[<p>Du könntest die Methoden auch so implementieren:</p>
<pre><code class="language-cpp">Fraction Fraction::operator*(Fraction const &amp;rhs) const
{
    Fraction result( *this );
    result *= rhs; // Hier halt entsprechenden Operator
    return result;
}
</code></pre>
<p>So ist der Code der */+- Operatoren unabhängig von der Implementierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495013</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 20 Apr 2008 12:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 12:09:05 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>ja schon klar...nur er übergibt ja dem konstruktor in der operator* methode die werte der zaehler und nenner, aber beim operator+ muss ich die doch vorher noch überarbeiten, soll ich sie einfach am ende an den konstruktor übergeben oder wie jetzt?</p>
</blockquote>
<p>Jup, im Prinzip alles so machen wie vorher, bloß halt immer mit dem temporären Objekt und nicht mit dem Original.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495015</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 12:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 12:17:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Fraction Fraction::operator+(Fraction &amp;fraction)
{

    fraction.set_zaehler(fraction.get_zaehler()*nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler*fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner *fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner()*nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler+fraction.get_zaehler();                        // Addition der beiden neuen Zähler
    Fraction result(zaehler,nenner);
    result.kuerzen();
    std::cout&lt;&lt;result&lt;&lt;std::endl;
    return result;
}
</code></pre>
<p>würde das dann so richtig sein bei dem operator+? das ich ganz unten dann ein tempobjekt erzeuge und dort dann die neuen zaehler und nenner übergebe?? oder muss ich das anders machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495018</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 12:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 12:30:05 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Fraction Fraction::operator+(Fraction &amp;fraction)
{

    fraction.set_zaehler(fraction.get_zaehler()*nenner);             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    zaehler = zaehler*fraction.get_nenner();                         // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    nenner = nenner *fraction.get_nenner();                          // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    fraction.set_nenner(fraction.get_nenner()*nenner);               // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    zaehler = zaehler+fraction.get_zaehler();                        // Addition der beiden neuen Zähler
    Fraction result(zaehler,nenner);
    result.kuerzen();
    std::cout&lt;&lt;result&lt;&lt;std::endl;
    return result;
}
</code></pre>
<p>würde das dann so richtig sein bei dem operator+? das ich ganz unten dann ein tempobjekt erzeuge und dort dann die neuen zaehler und nenner übergebe?? oder muss ich das anders machen?</p>
</blockquote>
<p>Nein, das ist schlecht so. Du veränderst damit Deinen rechten Operanden, da er als Referenz übergeben wird. Du musst in der Funktion erst ein lokales, temporäres Fraction-Objekt anlegen. Und damit musst Du dann arbeiten.<br />
Das Interface der Operator-Funktion würde ich so gestalten:</p>
<pre><code class="language-cpp">Fraction operator+(const Fraction&amp; right) const;
</code></pre>
<p>Dann kannst Du keine der Fraction-Objekte ändern die nicht geändert weden dürfen, da der Compiler meckert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495025</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 12:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 12:46:15 GMT]]></title><description><![CDATA[<p>sorry könnt ihr mir mal auf die srpünge helfen, ich habe es jetzt versucht umzuändern, jedoch mit liefert mir das ein falsches ergebnis...und so richtig durchblick hatte ich dann auch nicht mehr</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const Fraction &amp;right)const
{
    Fraction result(right.zaehler,right.nenner);

    result.zaehler = result.zaehler * right.nenner;             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    result.zaehler = result.zaehler * result.nenner;            // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    result.nenner = result.nenner * right.nenner;               // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    result.nenner = result.nenner * result.nenner ;             // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    result.set_zaehler(result.get_zaehler()+result.get_zaehler());                        // Addition der beiden neuen Zähler

    result.kuerzen();
    std::cout&lt;&lt;result&lt;&lt;std::endl;
    return result;
}
</code></pre>
<p>wäre echt dankbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495030</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 12:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 13:00:55 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>sorry könnt ihr mir mal auf die srpünge helfen, ich habe es jetzt versucht umzuändern, jedoch mit liefert mir das ein falsches ergebnis...und so richtig durchblick hatte ich dann auch nicht mehr</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const Fraction &amp;right)const
{
    Fraction result(right.zaehler,right.nenner);

    result.zaehler = result.zaehler * right.nenner;             // Zähler des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren
    result.zaehler = result.zaehler * result.nenner;            // Zähler des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    result.nenner = result.nenner * right.nenner;               // Nenner des 1. Bruches mit dem Nenner des 2. Bruches multiplizieren
    result.nenner = result.nenner * result.nenner ;             // Nenner des 2. Bruches mit dem Nenner des 1. Bruches multiplizieren

    result.set_zaehler(result.get_zaehler()+result.get_zaehler());                        // Addition der beiden neuen Zähler

    result.kuerzen();
    std::cout&lt;&lt;result&lt;&lt;std::endl;
    return result;
}
</code></pre>
<p>wäre echt dankbar</p>
</blockquote>
<p>So in etwa:</p>
<pre><code class="language-cpp">Fraction Fraction::operator+(const Fraction &amp;right)const
{
    Faction result
            ( zaehler * right.nenner + right.zaehler * nenner
            , nenner * right.nenner );
    return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1495038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495038</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 13:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 13:59:56 GMT]]></title><description><![CDATA[<p>ja naklar....danke euch vielmals...wenn ich fertig bin, würde ich es hier gerne mal vorstellen um mich eurer Kritik anzunehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1495071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495071</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 13:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 14:05:03 GMT]]></title><description><![CDATA[<p>ich hätte aber noch eine frage, wie kann ich jetzt zum beispiel das ergebnis von</p>
<p>fraction1+fraction2 mit dem cout ausgeben lassen, zurzeit kommt immer ein fehler.<br />
also es soll dann so aussehen</p>
<pre><code class="language-cpp">cout&lt;&lt;fraction&lt;+fraction2&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1495077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495077</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 14:05:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 14:26:01 GMT]]></title><description><![CDATA[<p>Der Fehler kommt, weil der Operator &lt;&lt; nicht für deine Bruch-Klasse überladen wurde. Du musst eben eine Methode schreiben, die den Zähler durch den Nenner dividiert und das Ergebnis als float oder double zurückgibt.</p>
<p>Noch zu den Operatoren: Wäre es nicht das einfachste, einfach globale Operatoren zu haben, wenn ja sowieso 2 Klassen benötigt werden? Und dass sie als friend deklariert wird, wäre ja auch kein Weltuntergang, oder?</p>
<p>Also etwa so:</p>
<pre><code class="language-cpp">Fraction operator+(const Fraction &amp;right, const Fraction &amp;left)
{
    Fraction Result;
    // hier führst du die Operationen mit Result aus
    return Result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1495101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495101</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 20 Apr 2008 14:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 14:27:59 GMT]]></title><description><![CDATA[<p>nee da haste was falsch verstanden, ich habe 1. nur eine Klasse und ich habe den &lt;&lt; operator schon überladen,und außerdem will ich ja gar keine dezimalzahl am ende haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
hier meine überladung:</p>
<pre><code class="language-cpp">std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f)
{
    return ostr&lt;&lt;f.get_zaehler()&lt;&lt;&quot;/&quot;&lt;&lt;f.get_nenner();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1495103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495103</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 20 Apr 2008 14:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei eigener Rationalklasse on Sun, 20 Apr 2008 15:04:43 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>nee da haste was falsch verstanden, ich habe 1. nur eine Klasse und ich habe den &lt;&lt; operator schon überladen,und außerdem will ich ja gar keine dezimalzahl am ende haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
hier meine überladung:</p>
<pre><code class="language-cpp">std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, Fraction &amp;f)
{
    return ostr&lt;&lt;f.get_zaehler()&lt;&lt;&quot;/&quot;&lt;&lt;f.get_nenner();
}
</code></pre>
</blockquote>
<p>Also wenn Dein überladener &lt;&lt;-Operator ein Friend Deiner Fraction Klasse ist, kannst Du direkt auf die Zähler- und Nennervariablen Zugreifen. Also ohne setter und getter Methoden.<br />
Außerdem sollte es so aussehen:</p>
<pre><code class="language-cpp">std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, const Fraction &amp;f)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1495129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1495129</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 20 Apr 2008 15:04:43 GMT</pubDate></item></channel></rss>