<?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[Mal wieder Überladung von Operatoren]]></title><description><![CDATA[<p>In der Theorie sind überladene Operatoren ja 'ne tolle Sache. Jetzt, wo ich am Apfelmännchen-Fraktal rumrechne, sind die überladenen Operatoren für komplexe Zahlen schwer wegzudenken aber ich habe ein grundlegendes Problem.</p>
<pre><code class="language-cpp">class CComplex  
{
public:
    double real;
    double imag;

// Operatoren ...
// Methoden ...
}
</code></pre>
<p>Wenn ich das mache :</p>
<pre><code class="language-cpp">CComplex &amp;CComplex::operator-(const CComplex &amp;zahl)
{
        CComplex pZahl;
    pZahl-&gt;imag=imag-zahl.imag;
    pZahl-&gt;real=real-zahl.real;
    return *pZahl;
}
</code></pre>
<p>dann kriege ich irgendwann einen Speicherüberlauf, weil anscheinend immer neue Objekte erzeugt, aber nie zerstört werden.</p>
<p>Wenn ich das mache :</p>
<pre><code class="language-cpp">CComplex &amp;CComplex::operator*(const CComplex &amp;zahl)
{
    CComplex pt2;
    //(a+bi)*(c+di)=(ac+adi+bci-bd)=ac-bd+(ad+bc)i
    pt2.real=(real*zahl.real)-(imag*zahl.imag);
    pt2.imag=(real*zahl.imag)+(imag*zahl.real);
    return pt2;
}

// und weiter :

CComplex &amp;CComplex::operator+(const CComplex &amp;zahl)
{
    CComplex pt3;
    pt3.imag=imag+zahl.imag;
    pt3.real=real+zahl.real;
    return pt3;
}

CComplex &amp;CComplex::operator=(const CComplex &amp;zahl)
{
    imag=zahl.imag;
    real=zahl.real;
    return *this;
}
</code></pre>
<p>dann wird bei einer Rechnung wie : z2=(z1*z1)+c mit z1,z2,c vom Typ CComplex<br />
zuerst die Multiplikation gerechnet und in der Addition ist bereits das Ergebnis der Multiplikation verloren. Irgendetwas grundlegendes mache ich anscheinend falsch. Aber was - hat jemand 'ne Idee ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/5956/mal-wieder-überladung-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 11:59:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/5956.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 May 2003 22:20:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mal wieder Überladung von Operatoren on Fri, 30 May 2003 22:20:00 GMT]]></title><description><![CDATA[<p>In der Theorie sind überladene Operatoren ja 'ne tolle Sache. Jetzt, wo ich am Apfelmännchen-Fraktal rumrechne, sind die überladenen Operatoren für komplexe Zahlen schwer wegzudenken aber ich habe ein grundlegendes Problem.</p>
<pre><code class="language-cpp">class CComplex  
{
public:
    double real;
    double imag;

// Operatoren ...
// Methoden ...
}
</code></pre>
<p>Wenn ich das mache :</p>
<pre><code class="language-cpp">CComplex &amp;CComplex::operator-(const CComplex &amp;zahl)
{
        CComplex pZahl;
    pZahl-&gt;imag=imag-zahl.imag;
    pZahl-&gt;real=real-zahl.real;
    return *pZahl;
}
</code></pre>
<p>dann kriege ich irgendwann einen Speicherüberlauf, weil anscheinend immer neue Objekte erzeugt, aber nie zerstört werden.</p>
<p>Wenn ich das mache :</p>
<pre><code class="language-cpp">CComplex &amp;CComplex::operator*(const CComplex &amp;zahl)
{
    CComplex pt2;
    //(a+bi)*(c+di)=(ac+adi+bci-bd)=ac-bd+(ad+bc)i
    pt2.real=(real*zahl.real)-(imag*zahl.imag);
    pt2.imag=(real*zahl.imag)+(imag*zahl.real);
    return pt2;
}

// und weiter :

CComplex &amp;CComplex::operator+(const CComplex &amp;zahl)
{
    CComplex pt3;
    pt3.imag=imag+zahl.imag;
    pt3.real=real+zahl.real;
    return pt3;
}

CComplex &amp;CComplex::operator=(const CComplex &amp;zahl)
{
    imag=zahl.imag;
    real=zahl.real;
    return *this;
}
</code></pre>
<p>dann wird bei einer Rechnung wie : z2=(z1*z1)+c mit z1,z2,c vom Typ CComplex<br />
zuerst die Multiplikation gerechnet und in der Addition ist bereits das Ergebnis der Multiplikation verloren. Irgendetwas grundlegendes mache ich anscheinend falsch. Aber was - hat jemand 'ne Idee ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/28966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/28966</guid><dc:creator><![CDATA[elysis]]></dc:creator><pubDate>Fri, 30 May 2003 22:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mal wieder Überladung von Operatoren on Fri, 30 May 2003 22:22:00 GMT]]></title><description><![CDATA[<p>PS : Im ersten Fall ist ein Fehler - das Objekt wird natürlich so erzeugt :</p>
<pre><code class="language-cpp">CComplex pZahl= new CComplex;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/28967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/28967</guid><dc:creator><![CDATA[elysis]]></dc:creator><pubDate>Fri, 30 May 2003 22:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mal wieder Überladung von Operatoren on Fri, 30 May 2003 22:35:00 GMT]]></title><description><![CDATA[<p>Du gibst Referenzen auf lokale Objekte zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/28968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/28968</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 30 May 2003 22:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mal wieder Überladung von Operatoren on Sat, 31 May 2003 08:58:00 GMT]]></title><description><![CDATA[<p>Autsch! - Wie blöd. Und dafür schreib' ich hier 'nen halben Roman !<br />
(Anfänger-Pech...) Dein Hinweis war dafür um so kürzer, aber wichtig, den jetzt funktioniert's.<br />
Danke <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/28969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/28969</guid><dc:creator><![CDATA[elysis]]></dc:creator><pubDate>Sat, 31 May 2003 08:58:00 GMT</pubDate></item></channel></rss>