<?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+ Überladen, fundamentale Frage des welches ist sinnvoller]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe eine kleine Frage an die Software Engineering und/oder C++-Performance Cracks unter euch. Ich habe gerade ein Seminar zu OpenGL. Dabei tauchte das Überladen des + Operators einer Klasse auf und damit auch ein nicht sinnvoll endenes Gespräch. Okay, genug Bla bla</p>
<p>Klasse A soll den operator + bereit stellen damit wir folgendes machen können:</p>
<pre><code class="language-cpp">A a, b, c // Wir gehen davon aus das die richtig initialisiert werden

a = b + c;
</code></pre>
<p>Gelernt habe ich das der operator + wie folgt überladen (implementiert) wird:</p>
<pre><code class="language-cpp">class A 
{
 //...
 friend A&amp; operator+(const A&amp; lhs, const A&amp; rhs); // würde ich nehmen
 //...
}
</code></pre>
<p>Unser Dozent besteht aber darauf das wir</p>
<pre><code class="language-cpp">A&amp; operator+(A&amp; x); // würde der OpenGL-Dozent nehmen
</code></pre>
<p>implementieren. Die Argumentation war das ja der Operator, weil nicht mit friend, direkt in der Klasse ist und das aus SE-Sicht logischer wäre. Ich finde pers. das nicht weniger logisch das wenn der operator mit friend deklariert ist, das das unlogischer wäre, aber naja, ist halt nen typischer Akademiker.</p>
<p>Die Sache ist halt nur das wir im C++ Kurs im letzten Semester nen Dozenten aus der Wirtschaft hatten, der uns eigentlich immer auf Performance und Sauberkeit geschult hat (der Dozent macht u.b. Quellcode-Support).</p>
<p>Welche der beiden Varianten würdet ihr z.b. für eine Vektor-Klassen implementierung bevorzugen? und wie natürlich?</p>
<p>edit #1: Die CPP-Tags geschlossen<br />
edit #2: überflüssiges const entfernt</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196876/operator-überladen-fundamentale-frage-des-welches-ist-sinnvoller</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:27:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196876.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Nov 2007 23:33:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator+ Überladen, fundamentale Frage des welches ist sinnvoller on Sun, 04 Nov 2007 10:46:24 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe eine kleine Frage an die Software Engineering und/oder C++-Performance Cracks unter euch. Ich habe gerade ein Seminar zu OpenGL. Dabei tauchte das Überladen des + Operators einer Klasse auf und damit auch ein nicht sinnvoll endenes Gespräch. Okay, genug Bla bla</p>
<p>Klasse A soll den operator + bereit stellen damit wir folgendes machen können:</p>
<pre><code class="language-cpp">A a, b, c // Wir gehen davon aus das die richtig initialisiert werden

a = b + c;
</code></pre>
<p>Gelernt habe ich das der operator + wie folgt überladen (implementiert) wird:</p>
<pre><code class="language-cpp">class A 
{
 //...
 friend A&amp; operator+(const A&amp; lhs, const A&amp; rhs); // würde ich nehmen
 //...
}
</code></pre>
<p>Unser Dozent besteht aber darauf das wir</p>
<pre><code class="language-cpp">A&amp; operator+(A&amp; x); // würde der OpenGL-Dozent nehmen
</code></pre>
<p>implementieren. Die Argumentation war das ja der Operator, weil nicht mit friend, direkt in der Klasse ist und das aus SE-Sicht logischer wäre. Ich finde pers. das nicht weniger logisch das wenn der operator mit friend deklariert ist, das das unlogischer wäre, aber naja, ist halt nen typischer Akademiker.</p>
<p>Die Sache ist halt nur das wir im C++ Kurs im letzten Semester nen Dozenten aus der Wirtschaft hatten, der uns eigentlich immer auf Performance und Sauberkeit geschult hat (der Dozent macht u.b. Quellcode-Support).</p>
<p>Welche der beiden Varianten würdet ihr z.b. für eine Vektor-Klassen implementierung bevorzugen? und wie natürlich?</p>
<p>edit #1: Die CPP-Tags geschlossen<br />
edit #2: überflüssiges const entfernt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397281</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Sun, 04 Nov 2007 10:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ Überladen, fundamentale Frage des welches ist sinnvoller on Sun, 04 Nov 2007 00:31:31 GMT]]></title><description><![CDATA[<p>effective c++ sagt deine variante ist richtiger. Nicht, weils aus oop-sicht oder so besser wäre, sondern, weil du dann auch ein objekt der Klasse A zu einem objekt eines typs der in a umgewandelt werden kann addieren kannst. zB:</p>
<pre><code class="language-cpp">class A
{
public:
 friend class A operator+(const A&amp; a) { // mach was; };
 A(int b) { // machwas; };
};

A a(6);
A c = 2 + a;  // geht nur, weil fkt friend ist. Wenn die fkt member wäre, ginge das nciht.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1397293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397293</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sun, 04 Nov 2007 00:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ Überladen, fundamentale Frage des welches ist sinnvoller on Sun, 04 Nov 2007 00:33:22 GMT]]></title><description><![CDATA[<p>Zum einen würde ich argumentieren, dass die Funktion etwas mit zwei Objekten macht, und nicht eine Operation auf einem Objekt ausführt. Die Addition zweier Zahlen würde ich auch nicht als die Funktion einer Zahl ansehen. Demnach würde ich die friend-Variante vorziehen. Ist aber sicher Geschmackssache <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="😉"
    /></p>
<p>Was an der Version vom Dozenten, genauso wie an der friend-Variante definitiv falsch ist, ist der Rückgabetyp. Eine Addition gibt ein neues Objekt mit dem Ergebnis zurück, nicht das Objekt auf der linken Seite vom operator (wenn die Funktion ein temporäres Objekt zurückgibt, knallts eh). Der Rückgabetyp kann noch const sein (der Übergabeparameter übrigens auch, zwar nicht falsch, aber definitiv Minuspunkt für den Dozent), da man sonst auf dem temporären Ergebnis der Addition Operationen ausführen könnte, die das Objekt verändern.</p>
<p>Also die Version des Dozenten müsste <strong>mindestens</strong> so aussehen:</p>
<pre><code class="language-cpp">A operator+(A&amp; x);
</code></pre>
<p>Besser wäre so:</p>
<pre><code class="language-cpp">A const operator+(A const&amp; x);
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2470">@Maxi</a>: Bei Dir fehlt der zweite Parameter <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397294</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 04 Nov 2007 00:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to operator+ Überladen, fundamentale Frage des welches ist sinnvoller on Sun, 04 Nov 2007 00:45:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>:</p>
<p>Das mit den const beim Rückgabetyp ist natürlich Blödsinn, da habe ich in mich verschrieben (o:</p>
<p>Genau die Argumentation das man ja zwei Objekte addiert und daraus ein drittes erzeugt wäre für mich auch total logisch (abgesehen wenn man inkrementiert).</p>
<p>Ich hab halt die Dozentenversion ehrlich gesagt bis heute noch nie gesehen, deshalb war ich so überrascht (was jetzt nen Minuspunkt für mich wäre <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/1397297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397297</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Sun, 04 Nov 2007 00:45:18 GMT</pubDate></item></channel></rss>