<?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[überladen von Operatoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem folgenden Quelltext zu verstehen:</p>
<pre><code class="language-cpp">class Polynom
{
public:
     Polynom();
     virtual ~Polynom();

     Polynom&amp; operator=(Polynom const &amp;P);
     Polynom&amp; operator*=(Polynom const &amp;P);
     Polynom operator+(Polynom const &amp;P) const;

private:
     double* a;
     int gr;
};

Polynom::operator+(const Polynom &amp;P) const
{
   Polynom r;
   r= *this;
   r+=P;

   return r;
}
</code></pre>
<p>Der Compiler findet frei Fehler.</p>
<p>Was macht der *this Zeiger? Ist die &quot; r+=P &quot; überhaupt so machbar?</p>
<p>Gruß<br />
Reptile100</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207387/überladen-von-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 02:52:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207387.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Mar 2008 19:00:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 19:00:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem folgenden Quelltext zu verstehen:</p>
<pre><code class="language-cpp">class Polynom
{
public:
     Polynom();
     virtual ~Polynom();

     Polynom&amp; operator=(Polynom const &amp;P);
     Polynom&amp; operator*=(Polynom const &amp;P);
     Polynom operator+(Polynom const &amp;P) const;

private:
     double* a;
     int gr;
};

Polynom::operator+(const Polynom &amp;P) const
{
   Polynom r;
   r= *this;
   r+=P;

   return r;
}
</code></pre>
<p>Der Compiler findet frei Fehler.</p>
<p>Was macht der *this Zeiger? Ist die &quot; r+=P &quot; überhaupt so machbar?</p>
<p>Gruß<br />
Reptile100</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469628</guid><dc:creator><![CDATA[Reptile100]]></dc:creator><pubDate>Thu, 06 Mar 2008 19:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 19:13:55 GMT]]></title><description><![CDATA[<p>normalerweise implementiert man operator+= (als memberfunktion) und operator+ als freie (idR friend) funktion so:</p>
<pre><code class="language-cpp">Foo operator+ (Foo const&amp; a, Foo const&amp; b)
{
   Foo tmp(a);
   a += b;
   return tmp;
}
</code></pre>
<p>die implementation von operator+= ist natürlich dann jeweils klassenspezifisch.</p>
<p>wenn du genauer sagst, was du nicht verstehst, kann man dir sicher auch besser weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469637</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 06 Mar 2008 19:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 19:18:33 GMT]]></title><description><![CDATA[<p>Reptile100 schrieb:</p>
<blockquote>
<p>ich hab ein Problem folgenden Quelltext zu verstehen:</p>
</blockquote>
<p>Zu sehen ist eine Klasse mit virtuellem Destruktur (für spätere Ableitungen gebraucht) und die Überladung für 3 Operatoren.<br />
Die kannst zu dann so anwenden:</p>
<pre><code class="language-cpp">Polynom p1, p2, p3;
p1 = p2; // entspricht p1.operator=(p2);
p1 *= p3; // entspricht p1.operator(p3);
p2 = p1 + p3; // entspricht p2 = p1.operator(p3);
</code></pre>
<p>relativ simple, nicht?</p>
<p>Reptile100 schrieb:</p>
<blockquote>
<p>Der Compiler findet frei Fehler.</p>
</blockquote>
<p>und du bist dir natürlich zu fein uns diese mitzuteilen?</p>
<p>Reptile100 schrieb:</p>
<blockquote>
<p>Was macht der *this Zeiger? Ist die &quot; r+=P &quot; überhaupt so machbar?</p>
<pre><code class="language-cpp">Polynom::operator+(const Polynom &amp;P) const
{
   Polynom r;
   r= *this;
   r+=P;

   return r;
}
</code></pre>
</blockquote>
<p>this ist der Zeiger auf das Object, *this der dereferenzierte Zeiger und somit das Objekt selbst.</p>
<p>ich würde dir empfehlen der Methode auch einen Rückgabewert zu geben <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469639</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Thu, 06 Mar 2008 19:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 19:53:32 GMT]]></title><description><![CDATA[<p>Danke für eure schnellen Antworten.</p>
<p>Fehler 1: error C2556: int_thiscall Polynom::operator +(const class Polynom &amp;) const : Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von class Polynom_thiscall Polynom::operator +(const class Polynom &amp;)const</p>
<p>Fehler 2: error C2371: + : Neudefinition; unterschiedliche Basistypen</p>
<p>Fehler 3: error C2676: Binaerer Operator += : class Polynom definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht.</p>
<p>Ich verstehe noch nicht wozu der this Zeiger hier gebraucht wird. Warum kann nicht gleich mit r+=P weitergemacht werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469655</guid><dc:creator><![CDATA[Reptile100]]></dc:creator><pubDate>Thu, 06 Mar 2008 19:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 20:16:54 GMT]]></title><description><![CDATA[<p>Die Fehler kommen vermutlich vom fehlenden Rückgabetyp bei der Definition der Methode operator+. Da fehlt ein &quot;Polynom &quot; am Anfang der Zeile.</p>
<blockquote>
<p>Ich verstehe noch nicht wozu der this Zeiger hier gebraucht wird. Warum kann nicht gleich mit r+=P weitergemacht werden?</p>
</blockquote>
<p>Weil operator+ doch das linke und das rechte Element addiert. Und das linke Element ist nunmal this. Ohne die Initialisierung (oder hier: Zuweisung, ist eigentlich weniger elegant) wäre r leer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469675</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Mar 2008 20:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 20:38:44 GMT]]></title><description><![CDATA[<p>Ich hab jetzt ein &quot;Polynom&quot; davor gesetzt.</p>
<pre><code class="language-cpp">Polynom::Polynom operator+(const Polynom &amp;P)const
{
    Polynom r;
    r=*this;
    r+=P;
    return r;
}
</code></pre>
<p>jetzt hab ich folgende Fehler:</p>
<p>Error C2143: Fehlendes ; vor +<br />
Error C2350: Polynom::Polynom::Polynom ist kein statisches Element<br />
fatal error C1004: Unerwartetes Dateiende</p>
<p>Damit ich das mit dem This Zeiger auch richtig verstehe:<br />
würde r ohne die this Zuweisung wie eine normale Variable behandelt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469688</guid><dc:creator><![CDATA[Reptile100]]></dc:creator><pubDate>Thu, 06 Mar 2008 20:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 20:58:13 GMT]]></title><description><![CDATA[<p>[quote=&quot;Reptile100&quot;]Ich hab jetzt ein &quot;Polynom&quot; davor gesetzt.</p>
<pre><code class="language-cpp">Polynom::Polynom operator+(const Polynom &amp;P)const
{
    Polynom r;
    r=*this;
    r+=P;
    return r;
}
</code></pre>
<p>Der Rückgabetyp gehört vor den Klassennamen.</p>
<pre><code class="language-cpp">Polynom Polynom::operator+(const Polynom &amp;P)const
{
    Polynom r;
    r=*this;
    r+=P;
    return r;
}
</code></pre>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469703</guid><dc:creator><![CDATA[cpp_lerner]]></dc:creator><pubDate>Thu, 06 Mar 2008 20:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 21:10:03 GMT]]></title><description><![CDATA[<p>Danke für eure Hilfe. Jetzt hab ich keinen Fehler mehr.</p>
<p>Gruß<br />
Reptile100</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469707</guid><dc:creator><![CDATA[Reptile100]]></dc:creator><pubDate>Thu, 06 Mar 2008 21:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Thu, 06 Mar 2008 22:18:42 GMT]]></title><description><![CDATA[<p>Hast du für Polynom keinen copy-ctor? Dann kannst du dir die Zuweisung sparen ... wenn dann noch operator+= korrekt implementiert ist, geht auch das:</p>
<pre><code class="language-cpp">const Polynom::Polynom operator+(Polynom const &amp; rhs) const
{
    Polynom tmp(*this);
    return tmp += rhs;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1469733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469733</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 06 Mar 2008 22:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Fri, 07 Mar 2008 00:52:14 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">a += b;
</code></pre>
</blockquote>
<p>Meintest natürlich tmp+= b <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469753</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Mar 2008 00:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Fri, 07 Mar 2008 09:42:39 GMT]]></title><description><![CDATA[<p>jaja, man sollte sich alles zweimal durchlesen ^^'<br />
aber kein problem, ich geb's weiter:</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">const Polynom::Polynom operator+(Polynom const &amp; rhs) const
</code></pre>
</blockquote>
<p>du meintest natürlich <code>const Polynom Polynom::operator+</code> . (oder auch gleich ohne <code>const</code> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469852</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Fri, 07 Mar 2008 09:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to überladen von Operatoren on Fri, 07 Mar 2008 11:25:01 GMT]]></title><description><![CDATA[<p>Nebenbei verträgt sich Operatorüberladung kaum mit polymorphen Basisklassen - Vererbung+Operatorüberladung ist fast immer ein Fehler. Natürlich gibt es auch Ausnahmen, wie die Standardstreams, aber die sind in mehrfacher Hinsicht ein Sonderfall.<br />
Die optimale Implementierung für operator+, wenn dieser auf += basieren soll und die Signatur so vorgeschrieben ist, lautet im Übrigen:</p>
<pre><code class="language-cpp">Polynom Polynom::Polynom operator+(Polynom const &amp; rhs) const
{
    Polynom tmp(*this);
    tmp += rhs;
    return tmp;
}
</code></pre>
<p>denkbar ist noch</p>
<pre><code class="language-cpp">Polynom operator+(Polynom lhs, Polynom const &amp; rhs)
{
    lhs += rhs;
    return lhs;
}
</code></pre>
<p>jede andere auf += basierende Form führt zwangsweise zu zusätzlichen nicht (per 12.8/15) eliminierbaren Kopien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1469923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1469923</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 07 Mar 2008 11:25:01 GMT</pubDate></item></channel></rss>