<?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[operator+=() und operator+()]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will die Operatoren operator+=(int zahl) und operator+(int zahl) überladen ich habe an das gedacht, ist das richtig oder wie sollte es besser heißen?</p>
<pre><code class="language-cpp">class vector3
   {
    public:
    vector3&amp; operator+=(const vector3 &amp;t)
	{ 
		return this-&gt;operator+(t);
	};
	vector3&amp; operator+(const vector3 &amp;t)
	{
		x+=t.x;
		y+=t.y;
		z+=t.z;
		return *this;
	};
    private:
         float x,y,z;
};
</code></pre>
<p>mfg <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/204635/operator-und-operator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 16:27:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204635.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Feb 2008 15:53:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator+=() und operator+() on Tue, 05 Feb 2008 15:53:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will die Operatoren operator+=(int zahl) und operator+(int zahl) überladen ich habe an das gedacht, ist das richtig oder wie sollte es besser heißen?</p>
<pre><code class="language-cpp">class vector3
   {
    public:
    vector3&amp; operator+=(const vector3 &amp;t)
	{ 
		return this-&gt;operator+(t);
	};
	vector3&amp; operator+(const vector3 &amp;t)
	{
		x+=t.x;
		y+=t.y;
		z+=t.z;
		return *this;
	};
    private:
         float x,y,z;
};
</code></pre>
<p>mfg <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/1449898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449898</guid><dc:creator><![CDATA[MilchTee]]></dc:creator><pubDate>Tue, 05 Feb 2008 15:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to operator+=() und operator+() on Tue, 05 Feb 2008 16:07:45 GMT]]></title><description><![CDATA[<p>MilchTee schrieb:</p>
<blockquote>
<p>ich will die Operatoren operator+=(int zahl) und operator+(int zahl) überladen ich habe an das gedacht, ist das richtig oder wie sollte es besser heißen?</p>
</blockquote>
<p>Es ist sinnvoller den operator+= vollständig zu implementieren und den operator+ davon herzuleiten (Damit += tatsächlich seine Performancevorteile ausspielen kann). Den operator+ würde ich zudem aus der Klasse ziehen.</p>
<p>Zudem sollte der operator+ <strong>immer</strong> eine Kopie zurückgeben und <strong>niemals</strong> das eigentliche Objekt manipulieren.</p>
<pre><code class="language-cpp">class vector3
{
  public:
    vector3&amp; operator+=(const vector3&amp; rhs);
    {
      x+=t.x;
      y+=t.y;
      z+=t.z;
      return *this;
    }

  private:
    float x,y,z;
};

vector3 operator+(const vector3 &amp;lhs, const vector3 &amp;rhs)
{
  vector3 v = ths;
  v += rhs;
  return v;
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449908</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 05 Feb 2008 16:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to operator+=() und operator+() on Tue, 05 Feb 2008 16:08:05 GMT]]></title><description><![CDATA[<p>Der Wert des Objekts ändert sich nicht bei + sondern bei +=.</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449909</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 05 Feb 2008 16:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to operator+=() und operator+() on Tue, 05 Feb 2008 16:24:39 GMT]]></title><description><![CDATA[<p>O.K vielen Dank. <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="🙂"
    /> Warum ist es besser auserhalb der Klasse zu haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449927</guid><dc:creator><![CDATA[MilchTee]]></dc:creator><pubDate>Tue, 05 Feb 2008 16:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to operator+=() und operator+() on Tue, 05 Feb 2008 16:48:54 GMT]]></title><description><![CDATA[<p>MilchTee schrieb:</p>
<blockquote>
<p>O.K vielen Dank. <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="🙂"
    /> Warum ist es besser auserhalb der Klasse zu haben?</p>
</blockquote>
<p>Es gibt mehrere Gründe dafür. Für mich sind zwei Dinge entscheidend:</p>
<p>1. Keine Beeinträchtigung des Objektzustandes<br />
Da in dem Beispiel der Operator+ nicht den Zustand der verwendeten Objekte beeinflusst, ist es auch nicht nötig ihn als Member zu definieren (Hierzu hat glaube ich Herb Sutter mal etwas sehr gutes geschrieben, weiß aber leider nicht mehr welches Buch von Ihm oder welcher Artikel).</p>
<p>2. Andere Argumenttypen auf linker Seite ermöglichen.<br />
Nehmen wir einfach mal an das du noch einen operator* schreiben willst, wo du mittels eines int-Wertes eine Multiplikation durchführen willst. Wenn du den Operator in der Klasse definierst ist nur folgendes realisierbar:<br />
vector1 = vector2 * 12;</p>
<p>Mit Außerhalb der Klasse definierten Operatoren kannst du aber sowohl das linke als auch das rechte Argument anpassen und z.B. einmal einen Operator mit den Parametern (int, const vector&amp;) und einmal (const vector&amp;, int) ermöglichen:<br />
vector1 = vector2 * 12;<br />
vector1 = 12 * vector2;</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449948</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 05 Feb 2008 16:48:54 GMT</pubDate></item></channel></rss>