<?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[Overloading design Frage]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>ich schreibe gerade meine eigene Vector2D Klasse. Ich habe in den FAQ den Beitrag zum Überladen gelesen und nun noch eineige Fragen. Ich würde gerne wissen, in welcher Art ich welche Operatoren am Besten überladen sollte:</p>
<p>1.) Welche Operatoren sollten member-Funktionen sein? Ich habe nur die Operatoren +=,-=,<em>=,/=. Die +-</em>/ würden das Objekt ja nicht verändern...<br />
2.) Wann sollte ich eine Version angeben, die ein konstantes Objekt zurück gibt?(Referenz darauf natürlich) Nur für die +=,-=,<em>=,/= oder auch für +-</em>/ oder garnicht?<br />
3.) Sollten die +-<em>/ Operatoren konstante Funktionen sein?<br />
4.) Welche Operatoren sollte befreundete Nicht-member-Funktionen sein? Ich habe mich für ==,!=,+-</em>/ entschieden. Auch hier wieder sollten sie konstant sein und der Rückgabetyp ebenfalls?<br />
5.) Sollten Operatoren generell inline sein?<br />
6.) die letzte Frage bezieht sich nicht auf Operaten, sondern auf statische Funktionen. Was ist vom Design besser:</p>
<pre><code>static float dotProduct(const Vector2D&amp;, const Vector2D&amp;);
//oder
float dotProduct(const Vector2D&amp;);
</code></pre>
<p>Hoffe ihr könnt mir ein paar Fragen beantworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294380/overloading-design-frage</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 22:38:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294380.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Oct 2011 11:54:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Overloading design Frage on Mon, 24 Oct 2011 11:54:56 GMT]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>ich schreibe gerade meine eigene Vector2D Klasse. Ich habe in den FAQ den Beitrag zum Überladen gelesen und nun noch eineige Fragen. Ich würde gerne wissen, in welcher Art ich welche Operatoren am Besten überladen sollte:</p>
<p>1.) Welche Operatoren sollten member-Funktionen sein? Ich habe nur die Operatoren +=,-=,<em>=,/=. Die +-</em>/ würden das Objekt ja nicht verändern...<br />
2.) Wann sollte ich eine Version angeben, die ein konstantes Objekt zurück gibt?(Referenz darauf natürlich) Nur für die +=,-=,<em>=,/= oder auch für +-</em>/ oder garnicht?<br />
3.) Sollten die +-<em>/ Operatoren konstante Funktionen sein?<br />
4.) Welche Operatoren sollte befreundete Nicht-member-Funktionen sein? Ich habe mich für ==,!=,+-</em>/ entschieden. Auch hier wieder sollten sie konstant sein und der Rückgabetyp ebenfalls?<br />
5.) Sollten Operatoren generell inline sein?<br />
6.) die letzte Frage bezieht sich nicht auf Operaten, sondern auf statische Funktionen. Was ist vom Design besser:</p>
<pre><code>static float dotProduct(const Vector2D&amp;, const Vector2D&amp;);
//oder
float dotProduct(const Vector2D&amp;);
</code></pre>
<p>Hoffe ihr könnt mir ein paar Fragen beantworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135069</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Mon, 24 Oct 2011 11:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Overloading design Frage on Mon, 24 Oct 2011 12:08:37 GMT]]></title><description><![CDATA[<p>Vieles, wenn nicht alles, sollte mit Begründung und Beispielen hier zu finden sein:<br />
<a href="http://www.c-plusplus.net/forum/232010" rel="nofollow">http://www.c-plusplus.net/forum/232010</a><br />
<a href="http://www.c-plusplus.net/forum/240706" rel="nofollow">http://www.c-plusplus.net/forum/240706</a><br />
(oder waren diese Seiten schon das, was du mit FAQ meintest? Da drin steht jedenfalls vieles von dem was du gefragt hast beantwortet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135073</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:08:37 GMT</pubDate></item><item><title><![CDATA[Reply to Overloading design Frage on Mon, 24 Oct 2011 12:33:44 GMT]]></title><description><![CDATA[<p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mo>−</mo><mi>B</mi><mi>o</mi><mi>o</mi><mi>t</mi><mi>L</mi><mi>a</mi><mi>g</mi><mo>−</mo></mrow><annotation encoding="application/x-tex">-BootLag-</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.68333em;"></span><span class="strut bottom" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord">−</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mord mathit">o</span><span class="mord mathit">o</span><span class="mord mathit">t</span><span class="mord mathit">L</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mbin">−</span></span></span></span> schrieb:</p>
<blockquote>
<p>1.) Welche Operatoren sollten member-Funktionen sein? Ich habe nur die Operatoren +=,-=,<em>=,/=. Die +-</em>/ würden das Objekt ja nicht verändern...</p>
</blockquote>
<p>Steht im ersten Link von SeppJ</p>
<blockquote>
<p>2.) Wann sollte ich eine Version angeben, die ein konstantes Objekt zurück gibt?(Referenz darauf natürlich) Nur für die +=,-=,<em>=,/= oder auch für +-</em>/ oder garnicht?</p>
</blockquote>
<p>- Konstantes Objekt: garnicht. Es gab mal Vertreter der Meinung, dass a+b ein konstantes Objekt zurückgeben sollte, allerdings hat sich das mit C++0x erledigt, da zurückgegebene konstante Objekte rvalues sind, aber nicht mit rvalue-Referenz-Parameter binden, da die non-const sind, um den rvalue ggf. moven zu können.<br />
- Konstante Referenz: erst recht nicht, schon garnicht bei den von dir angesprochenen Operatoren. += &amp;Co. verändern das Objekt ja schon, wäre unlogisch, wenn die Rückgabe dann eine const-referenz auf das gradenoch veränderbare Objekt wäre. +, - &amp;Co. erzeugen ein neues Objekt, da eine const Ref drauf zurückzugeben wäre schlichtweg falsch, weils sofort eine hängende Referenz wäre.<br />
Welchen Typ die Rückgabe richtigerweise haben sollte zeigt auch Sepps erster Link</p>
<blockquote>
<p>3.) Sollten die +-<em>/ Operatoren konstante Funktionen sein?<br />
4.) Welche Operatoren sollte befreundete Nicht-member-Funktionen sein? Ich habe mich für ==,!=,+-</em>/ entschieden. Auch hier wieder sollten sie konstant sein und der Rückgabetyp ebenfalls?</p>
</blockquote>
<p>Siehe erster Link.</p>
<blockquote>
<p>5.) Sollten Operatoren generell inline sein?</p>
</blockquote>
<p>Nein. inline ist nie mehr als ein freundlicher Hinweis an den Compiler, der aber sowieso besser weiß, was er am Besten inlined und was nicht. Einziger Anwendungsfall für inline ist heutzutage nurnoch das Schreiben von Header-only-Bibliotheken (und -Klassen, wenns denn sein muss).</p>
<blockquote>
<p>6.) die letzte Frage bezieht sich nicht auf Operaten, sondern auf statische Funktionen. Was ist vom Design besser:</p>
<pre><code>static float dotProduct(const Vector2D&amp;, const Vector2D&amp;);
//oder
float dotProduct(const Vector2D&amp;);
</code></pre>
</blockquote>
<p>Das sind zwei völlig unterschiedliche Funktionen. static hat außerdem zwei sehr unterschiedliche Bedeutungen, je nachdem ob es in einer Klasse oder im namespace-scope steht. Die Frage ist so also nicht zu beantworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135086</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to Overloading design Frage on Mon, 24 Oct 2011 12:44:34 GMT]]></title><description><![CDATA[<p>Ok ich werde mir mal die Links ansehen. Danke für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135095</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:44:34 GMT</pubDate></item></channel></rss>