<?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überladungen]]></title><description><![CDATA[<p>Hallo,<br />
wann nutzt ihr bei Operatorüberladungen freie Funktionen (eventuell friend) und wann implementiert ihr sie als Memberfunktion?<br />
Beides ist möglich und beides habe ich schon öfter gesehen, aber ich habe keine Ahnung wann was Sinnvoll ist?</p>
<p>(static wäre ja auch noch möglich, wobei ich das noch nie gesehen habe.)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292648/operatorüberladungen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 18:09:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292648.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Sep 2011 16:12:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:12:11 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wann nutzt ihr bei Operatorüberladungen freie Funktionen (eventuell friend) und wann implementiert ihr sie als Memberfunktion?<br />
Beides ist möglich und beides habe ich schon öfter gesehen, aber ich habe keine Ahnung wann was Sinnvoll ist?</p>
<p>(static wäre ja auch noch möglich, wobei ich das noch nie gesehen habe.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119369</guid><dc:creator><![CDATA[operatorRR]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:18:06 GMT]]></title><description><![CDATA[<p>Generelle Richtlinien gibt es afaik nicht, aber was nicht unbedingt auf die Klassen-Interna angewiesen ist, sollte nicht in die Klasse rein. Ansonsten kenne ich nur die Fälle, die als Member (Zuweisung, Index, Funktion, Dereferenzierung) bzw. als freie Funktionen (Stream-IO, linker Operand ist Build-in oder vergleichbares) implementiert werden <strong>müssen</strong>.</p>
<p>operatorRR schrieb:</p>
<blockquote>
<p>(static wäre ja auch noch möglich, wobei ich das noch nie gesehen habe.)</p>
</blockquote>
<p>Das kenne ich nur von new und delete (und da ist es afaik implizit).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119373</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:30:21 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Generelle Richtlinien gibt es afaik nicht, aber was nicht unbedingt auf die Klassen-Interna angewiesen ist, sollte nicht in die Klasse rein.</p>
</blockquote>
<p>Sind mit Interna nur private Dinge gemeint? Wenn man z.B. eine (geometrische) Vektorklasse hat, dann sind die x1, x2, x3 bzw. x, y, z Member ja public. Unäre/Binäre +/- Operatoren jetzt in der Klasse oder frei implementieren?</p>
<p>Macht das überhaupt irgendeinen Unterschied? (Also von der Nutzung her.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119386</guid><dc:creator><![CDATA[operatorRR]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:36:03 GMT]]></title><description><![CDATA[<p>Ich würde die unären Operatoren und die Zuweisungen als Klassenmember schreiben und die normalen Rechenoperatoren als freie Inline-Funktionen darauf aufsetzen lassen.<br />
Und der einzige Unterschied, der mir auf Anhieb bei der Anwendung einfällt, sind mögliche Typ-Umwandlungen der Parameter - Ausdrücke wie &quot;4711+x&quot; lassen sich nur mit einem freien Additions-Operator übersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119389</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:53:59 GMT]]></title><description><![CDATA[<p>operatorRR schrieb:</p>
<blockquote>
<p>aber ich habe keine Ahnung wann was Sinnvoll ist?</p>
</blockquote>
<p>Ich hab da mal was vorbereitet <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="😉"
    /> <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119396</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:53:59 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Wed, 14 Sep 2011 16:59:01 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich hab da mal was vorbereitet <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="😉"
    /> <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)</a></p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Hahaha danke, das lese ich mir mal durch. Toll, dass du das extra für mich geschrieben hast. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119397</guid><dc:creator><![CDATA[Dankbarer OperatorRR]]></dc:creator><pubDate>Wed, 14 Sep 2011 16:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladungen on Thu, 15 Sep 2011 08:15:05 GMT]]></title><description><![CDATA[<p>Kurz und knackig: Ziehe, falls möglich, freie Funktionen vor. Die Zahl der Funktionen, die direkt mit den Internas spielen können, sollte man klein halten.</p>
<p>inline friends haben aber auch ihre Vorzüge, gerade bei Klassentemplates:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class mycomplex;
...
template&lt;class T&gt; mycomplex&lt;T&gt; operator+(T,mycomplex&lt;T&gt;);
...

int main() {
  mycomplex&lt;double&gt; x;
  5 + x; // template argument deduction failure, T=double und T=int beißen sich.
}
</code></pre>
<p>Alternativ:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class mycomplex {
  ...
  friend mycomplex operator+(T x, mycomplex y) {
    ...
  }
  ...
};

int main() {
  mycomplex&lt;double&gt; x;
  5 + x; // funkioniert. operator+ ist hier kein Template
         // und 5 wird implizit zu einem double konvertiert
}
</code></pre>
<p>Hier wird also &quot;friend&quot; hauptsächlich deswegen benutzt, um aus operator+ eine &quot;normale&quot; Funktion zu machen und kein eigenes Funktionstemplate.</p>
<p>Noch ein Tipp: &quot;Effective C++&quot; kaufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119582</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 15 Sep 2011 08:15:05 GMT</pubDate></item></channel></rss>