<?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[Warum muss man += extra überladen?]]></title><description><![CDATA[<pre><code class="language-cpp">class foo{
public:
	int i;
};

foo&amp; operator+(foo&amp; f1, const foo&amp; f2){
	f1.i+=f2.i;
	return f1;
}

int main(int argc, char** argv) {

	foo f1,f2;
	f1.i=8;
	f2.i=1;
	f1=f1+f2;
	f1+=f2;

	std::cout&lt;&lt;f1.i;

	return 0;
}
</code></pre>
<p>Wenn man + überläd müsste += doch automatisch überladen sein. x+=y ist doch nur die Kurzschreibweise für x=x+y. Warum muss man += trotzdem nochmal überladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212751/warum-muss-man-extra-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 16:43:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212751.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 May 2008 04:03:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum muss man += extra überladen? on Sat, 10 May 2008 04:03:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class foo{
public:
	int i;
};

foo&amp; operator+(foo&amp; f1, const foo&amp; f2){
	f1.i+=f2.i;
	return f1;
}

int main(int argc, char** argv) {

	foo f1,f2;
	f1.i=8;
	f2.i=1;
	f1=f1+f2;
	f1+=f2;

	std::cout&lt;&lt;f1.i;

	return 0;
}
</code></pre>
<p>Wenn man + überläd müsste += doch automatisch überladen sein. x+=y ist doch nur die Kurzschreibweise für x=x+y. Warum muss man += trotzdem nochmal überladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506372</guid><dc:creator><![CDATA[überlader]]></dc:creator><pubDate>Sat, 10 May 2008 04:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Warum muss man += extra überladen? on Sat, 10 May 2008 06:14:52 GMT]]></title><description><![CDATA[<p>überlader schrieb:</p>
<blockquote>
<p>Wenn man + überläd müsste += doch automatisch überladen sein. x+=y ist doch nur die Kurzschreibweise für x=x+y. Warum muss man += trotzdem nochmal überladen?</p>
</blockquote>
<p>Nein, das ist ein Trugschluß (es wird zwar in anderen Sprachen teilweise so gemacht aber nicht in C++), und hat auch mit effizienz zu tun. Zudem solltest du wenn anders rum denken: + läßt sich auch durch += umsetzen...</p>
<p>Zudem ist dein + falsch überschrieben. + sollte das Objekt nicht ändern, += schon. Zudem sollte + ein Objekt zurückgeben, += eine Referenz.<br />
Regel: Orientiere dich an int (Es ist intuitiver wenn sich deine Operatoren so verhalten wie man es von int gewohnt ist).</p>
<p>Und:</p>
<pre><code class="language-cpp">int a = 1;
int b = 2;
int c = a + b;
</code></pre>
<p>Ändert weder a noch b.</p>
<pre><code class="language-cpp">class Foo
{
  private:
    int a;
  public:
    Foo(int a=0)
    : a(a)
    {}

    Foo&amp; operator+=(Foo const &amp; rhs)
    {
      this-&gt;a += rhs.a;
      return *this;
    }
};

Foo operator+(const Foo&amp; lhs, const Foo&amp; rhs)
{
    Foo returnValue(lhs); // Kopie anlegen
    returnValue += rhs;   // operator += auf Kopie anwenden
    return returnValue;   // Kopie zurückliefern
}
</code></pre>
<p>+ arbeitet mit Temporären Objekten, += nicht.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506378</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 10 May 2008 06:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to Warum muss man += extra überladen? on Sat, 10 May 2008 08:49:14 GMT]]></title><description><![CDATA[<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506412</guid><dc:creator><![CDATA[überlader]]></dc:creator><pubDate>Sat, 10 May 2008 08:49:14 GMT</pubDate></item></channel></rss>