<?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* von in Klasse definiertem operator*= aufrufen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich schreibe mir gerade eine Klasse, bei der ich mich Frage, ob ich aus dem operator*=() heraus den außerhalb der Klasse definierten operator*() aufrufen könnte, um Code zu sparen.</p>
<p>Diese Definition:</p>
<pre><code class="language-cpp">Klasse&amp; operator*= (const Klasse&amp; k)
	{
		// Viel Code
		return *this;
	}
</code></pre>
<p>wird zu...</p>
<pre><code class="language-cpp">Klasse&amp; operator*= (const Klasse&amp; k)
	{
		this = operator* (this, k);
		return *this;
	}
</code></pre>
<p>Unter der Annahme, dass dieser Operator existiert:</p>
<pre><code class="language-cpp">Klasse operator* (const Klasse&amp; k1, const Klasse&amp; k2)
{
	Klasse neueKlasse;
	// ...
	return neueKlasse;
}
</code></pre>
<p>Vorallem weiß ich nicht so recht, was hier passiert:</p>
<pre><code class="language-cpp">this = operator* (this, k);
</code></pre>
<p>Ich weiße dem this Zeiger einfach ein neues Objekt zu. Was passiert mit dem alten? Das von operator* zurückgelieferte Objekt liegt doch außerdem ganz wo anders, also es wäre sowieso generell gut, wenn mir jemand erklären könnte, was hier genau passiert. Und dann natürlich, ob das alles so &quot;legal&quot; 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/218354/operator-von-in-klasse-definiertem-operator-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 06:29:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218354.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Jul 2008 20:42:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator* von in Klasse definiertem operator*= aufrufen on Sat, 19 Jul 2008 20:42:27 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich schreibe mir gerade eine Klasse, bei der ich mich Frage, ob ich aus dem operator*=() heraus den außerhalb der Klasse definierten operator*() aufrufen könnte, um Code zu sparen.</p>
<p>Diese Definition:</p>
<pre><code class="language-cpp">Klasse&amp; operator*= (const Klasse&amp; k)
	{
		// Viel Code
		return *this;
	}
</code></pre>
<p>wird zu...</p>
<pre><code class="language-cpp">Klasse&amp; operator*= (const Klasse&amp; k)
	{
		this = operator* (this, k);
		return *this;
	}
</code></pre>
<p>Unter der Annahme, dass dieser Operator existiert:</p>
<pre><code class="language-cpp">Klasse operator* (const Klasse&amp; k1, const Klasse&amp; k2)
{
	Klasse neueKlasse;
	// ...
	return neueKlasse;
}
</code></pre>
<p>Vorallem weiß ich nicht so recht, was hier passiert:</p>
<pre><code class="language-cpp">this = operator* (this, k);
</code></pre>
<p>Ich weiße dem this Zeiger einfach ein neues Objekt zu. Was passiert mit dem alten? Das von operator* zurückgelieferte Objekt liegt doch außerdem ganz wo anders, also es wäre sowieso generell gut, wenn mir jemand erklären könnte, was hier genau passiert. Und dann natürlich, ob das alles so &quot;legal&quot; 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/1549954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549954</guid><dc:creator><![CDATA[Ratespiel]]></dc:creator><pubDate>Sat, 19 Jul 2008 20:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to operator* von in Klasse definiertem operator*= aufrufen on Sat, 19 Jul 2008 20:46:08 GMT]]></title><description><![CDATA[<p>Du musst den this Zeiger dereferenzieren:</p>
<pre><code class="language-cpp">*this = operator*(this, k);
//oder
*this = *this * k;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549956</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 19 Jul 2008 20:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to operator* von in Klasse definiertem operator*= aufrufen on Sat, 19 Jul 2008 21:13:14 GMT]]></title><description><![CDATA[<p>Ratespiel schrieb:</p>
<blockquote>
<p>ich schreibe mir gerade eine Klasse, bei der ich mich Frage, ob ich aus dem operator*=() heraus den außerhalb der Klasse definierten operator*() aufrufen könnte, um Code zu sparen.</p>
</blockquote>
<p>Die Idee ist gut, aber besser ist es andersrum: Den außen definierten Operator mithilfe des *= Operators zu definieren:</p>
<pre><code class="language-cpp">Klasse operator*(const Klasse&amp; a, const Klasse&amp; b) {
  Klasse temp(a);
  temp += b;
  return temp;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549964</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 19 Jul 2008 21:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to operator* von in Klasse definiertem operator*= aufrufen on Sat, 19 Jul 2008 21:31:08 GMT]]></title><description><![CDATA[<p>OK, danke euch beiden. Bashar, du musst jetzt aber noch begründen, warum das so besser ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549969</guid><dc:creator><![CDATA[Ratespiel]]></dc:creator><pubDate>Sat, 19 Jul 2008 21:31:08 GMT</pubDate></item><item><title><![CDATA[Reply to operator* von in Klasse definiertem operator*= aufrufen on Sun, 20 Jul 2008 10:20:11 GMT]]></title><description><![CDATA[<p>Weniger temporäre Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1550091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1550091</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 20 Jul 2008 10:20:11 GMT</pubDate></item></channel></rss>