<?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[Operatoren Überladen Verständnisproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wir schreiben morgen Klausur und ich hab noch eine kleine Frage die mich schon den ganzen Tag beschäftigt.</p>
<p>Und zwar haben wir das Buch C++ - Kurz und gut und da steht ein Beispiel zur Operatorenüberladung drin. Das verstehe ich nicht ganz. Vllt kanns mir einer schnell sagen...</p>
<pre><code class="language-cpp">class Account
{
public:
Account &amp;operator+=(Account &amp;a)
{balance+= a.balance;
return *this;}

private:
double balance;
}
</code></pre>
<p>Damit kann ich ja jetzt zwei Accountinstanzen addieren und balance von b auf a draufaddieren.</p>
<p>Aber ich verstehe nicht, warum man das &amp; verwendet.</p>
<p>bei *Account **&amp;*<em>a</em> weiß ich dass man dort die referenz von account benutzt, wegen der lokalen sichtbarkeit usw.</p>
<p>Aber warum schreibt man *Account **&amp;*<em>operator+=?</em> Das ergibt für mich keinen Sinn, weil bei ner Referenz stellt man das &amp; doch eigentlich voran, und nich hintendran.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270451/operatoren-überladen-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 05:43:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270451.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jul 2010 19:55:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 19:55:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wir schreiben morgen Klausur und ich hab noch eine kleine Frage die mich schon den ganzen Tag beschäftigt.</p>
<p>Und zwar haben wir das Buch C++ - Kurz und gut und da steht ein Beispiel zur Operatorenüberladung drin. Das verstehe ich nicht ganz. Vllt kanns mir einer schnell sagen...</p>
<pre><code class="language-cpp">class Account
{
public:
Account &amp;operator+=(Account &amp;a)
{balance+= a.balance;
return *this;}

private:
double balance;
}
</code></pre>
<p>Damit kann ich ja jetzt zwei Accountinstanzen addieren und balance von b auf a draufaddieren.</p>
<p>Aber ich verstehe nicht, warum man das &amp; verwendet.</p>
<p>bei *Account **&amp;*<em>a</em> weiß ich dass man dort die referenz von account benutzt, wegen der lokalen sichtbarkeit usw.</p>
<p>Aber warum schreibt man *Account **&amp;*<em>operator+=?</em> Das ergibt für mich keinen Sinn, weil bei ner Referenz stellt man das &amp; doch eigentlich voran, und nich hintendran.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925270</guid><dc:creator><![CDATA[raised.fist]]></dc:creator><pubDate>Mon, 12 Jul 2010 19:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:29:05 GMT]]></title><description><![CDATA[<p>Der Rückgabewert von <code>operator+=</code> ist eine Referenz auf Accout. Das macht man, damit so etwas möglich wird:</p>
<pre><code class="language-cpp">Account a, b, c;
a += b += c;

// Equivalent zu
b += c;
a += b;

// Edit: NICHT equivalent zu
a += b;
a += c;
</code></pre>
<p>Übrigens sollte der Parameter des Operators besser <code>const Account &amp;a</code> sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925273</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:04:03 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Der Rückgabewert von <code>operator+=</code> ist eine Referenz auf Accout. Das macht man, damit so etwas möglich wird:</p>
<pre><code class="language-cpp">Account a, b, c;
a += b += c;

// Equivalent zu
a += b;
a += c;
</code></pre>
<p>Übrigens sollte der Parameter des Operators besser <code>const Account &amp;a</code> sein.</p>
</blockquote>
<p>Ok danke.</p>
<p>Stimmt, im buch ist der Parameter auch const Account, aber ich hab ihn weggelassen. Warum sollte der const sein?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925274</guid><dc:creator><![CDATA[raised.fist]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:16:42 GMT]]></title><description><![CDATA[<p>Ganz einfach:</p>
<pre><code class="language-cpp">Account a;
const Account b;
a += b;
</code></pre>
<p>Dieser Code klappt nur, wenn operator+= ein konstantes Objekt erwartet, weil eine implizite Konvertierung von <code>const Account</code> in <code>Account</code> nicht möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925279</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:18:47 GMT]]></title><description><![CDATA[<p>raised.fist schrieb:</p>
<blockquote>
<p>Stimmt, im buch ist der Parameter auch const Account, aber ich hab ihn weggelassen. Warum sollte der const sein?</p>
</blockquote>
<p>Weil du damit nur einen lesenden Zugriff machst (a.balance) und keinen schreibenden,<br />
du also die Attribute des Objekts 'a' in der Funktion nirgends verändern willst.<br />
Wenn etwas nich verändert werden soll, macht man es 'const'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925280</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:18:47 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:19:01 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Account a, b, c;
a += b += c;

// Equivalent zu
a += b;
a += c;
</code></pre>
</blockquote>
<p>Nein, das ist nicht äquivalent, denn b wird auch verändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925281</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:28:04 GMT]]></title><description><![CDATA[<p>Oh ja hast Recht, ich hab vergessen, dass += von rechts nach links und nicht von links nach rechts abgearbeitet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925283</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen Verständnisproblem on Mon, 12 Jul 2010 20:40:02 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Der Rückgabewert von <code>operator+=</code> ist eine Referenz auf Accout. Das macht man, damit so etwas möglich wird:</p>
<pre><code class="language-cpp">Account a, b, c;
a += b += c;

// Equivalent zu
b += c;
a += b;

// Edit: NICHT equivalent zu
a += b;
a += c;
</code></pre>
<p>Übrigens sollte der Parameter des Operators besser <code>const Account &amp;a</code> sein.</p>
</blockquote>
<p>also</p>
<pre><code class="language-cpp">a += b += c;
</code></pre>
<p>ist equivalent zu</p>
<pre><code class="language-cpp">b+=c;
a+=b;
</code></pre>
<p>da Abarbeitung von right-to-left stattfindet.</p>
<p>Der Grund, warum du</p>
<pre><code class="language-cpp">Account &amp;operator+=
</code></pre>
<p>machst: Wenn eine Funktion etwas zurückgibt, das bereits vor dem Aufruf der Funktion existiert, macht man eine Referenzrückgabe.</p>
<p>--&gt; b+=c; --&gt; Returnwert ist 'b' und 'b' existiert ja bereits vor dem Methodenaufruf... wieso also eine unnötige copy machen, kann man doch gleich das Original verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925287</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 20:40:02 GMT</pubDate></item></channel></rss>