<?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überladung, Vererbung]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>angenommen man hat für eine Klasse A den +Operator überladen</p>
<pre><code class="language-cpp">const A operator+(const A&amp; lhs, const A&amp; rhs)
{
 /* ... */ 
}
</code></pre>
<p>Angenommen B ist eine Unterklasse von A, müsste dann so etwas nicht möglich sein:</p>
<pre><code class="language-cpp">B b1;
B b2;

B res = b1 + b2;
</code></pre>
<p>Wobei hier das &quot;+&quot; verwendet werden sollte, welches man für die Oberklasse A definiert hat.</p>
<p>Kompilieren tut das bei mir, aber ich bekomme unerwartet Werte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß <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/305385/operatorüberladung-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 23:17:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305385.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jun 2012 18:40:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 18:40:08 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>angenommen man hat für eine Klasse A den +Operator überladen</p>
<pre><code class="language-cpp">const A operator+(const A&amp; lhs, const A&amp; rhs)
{
 /* ... */ 
}
</code></pre>
<p>Angenommen B ist eine Unterklasse von A, müsste dann so etwas nicht möglich sein:</p>
<pre><code class="language-cpp">B b1;
B b2;

B res = b1 + b2;
</code></pre>
<p>Wobei hier das &quot;+&quot; verwendet werden sollte, welches man für die Oberklasse A definiert hat.</p>
<p>Kompilieren tut das bei mir, aber ich bekomme unerwartet Werte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß <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/2227883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227883</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 18:44:12 GMT]]></title><description><![CDATA[<p>Du hast fuer den B Teil der Klasse ja keinen operator+<br />
Da kann also nichts sinnvolles rauskommen.</p>
<p>Als Merksatz: Niemals operatoren in polymorphen Klassen ueberladen.</p>
<p>denn operatoren sagen, dass es eine Value-Klasse ist aber Polymorphie sagt, dass es keine Value-Klasse ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227884</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 18:45:30 GMT]]></title><description><![CDATA[<p>Ach Sorry, ich hab mich vertippt ...</p>
<p>So ist der letzte Teil richtig:</p>
<pre><code class="language-cpp">B b1;
B b2;

A res = b1 + b2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2227886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227886</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 19:26:35 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Als Merksatz: Niemals operatoren in polymorphen Klassen ueberladen.</p>
<p>denn operatoren sagen, dass es eine Value-Klasse ist aber Polymorphie sagt, dass es keine Value-Klasse ist.</p>
</blockquote>
<p>CRTP <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/2227897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227897</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 27 Jun 2012 19:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 19:27:56 GMT]]></title><description><![CDATA[<p>Dumme Frage vllt, aber was ist eine Value-Klasse? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227900</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Wed, 27 Jun 2012 19:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 19:30:27 GMT]]></title><description><![CDATA[<p>@ Shade of Mine</p>
<p>kannst du das mit Operatoren und Polymorphie näher erleutern? Oder vielleicht ein Beispiel machen?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227902</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Wed, 27 Jun 2012 19:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Wed, 27 Jun 2012 20:01:57 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Dumme Frage vllt, aber was ist eine Value-Klasse? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Klassen wie zB integer, vector, string, map,...<br />
Im Gegensatz zu Klassen wie zB command, observer, listener, ...</p>
<p>Wenn du die Klasse mit einem Wert abbilden kannst (zB &quot;hallo&quot; fuer einen string) dann ist es eine Value Klasse. Die Trennung ist nicht immer 100% einfach und der Merksatz gilt in jeder Situation. Aber er ist eine gute Regel.</p>
<p>PS:<br />
fuer Hyde++:</p>
<p>Das Problem mit Operatoren wie zB + oder = ist folgendes: wir muessen vorher festlegen welcher Typ als Ergebnis rauskommt.</p>
<p>Wenn wir die Klasse Base haben und davon eine Klasse ableiten: Derived - was passiert wenn wir Base+Derived rechnen? Kommt da ein Derived oder ein Base raus? Viel Schlimmer dabei ist aber noch: wir wissen ja nichtmal welche 2 Typen wir haben - die sind ja hinter der Polymorphie versteckt.</p>
<p>Alles also ist nicht optimal, denn entweder wir fuellen den Teil von Derived der Base fehlt mit standardwerten oder wir ignorieren den Teil von Derived der in Base nicht vorhanden ist. Beides nicht so toll.</p>
<p>Das ganze kann man natuerlich irgendwie loesen, aber idR ist es besser zu hinterfragen: warum haben wir diese Operatoren. idR geht es dabei um den operator= (da +, /, etc. meistens eh keinen Sinn machen).</p>
<p>Und da haben wir folgendes Problem:<br />
Base&amp; r = rand()%2 ? Base() : Derived();<br />
Base b = r;<br />
doofe Sache sowas. Was hat denn r? ein Base oder Derived? dh wir haben uU slicing hier.</p>
<p>Meistens ist sowas viel entspannender mit einer clone() Methode zu loesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227903</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 Jun 2012 20:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung, Vererbung on Thu, 28 Jun 2012 06:36:02 GMT]]></title><description><![CDATA[<p>Danke für die Erklärung <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/2228001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228001</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Thu, 28 Jun 2012 06:36:02 GMT</pubDate></item></channel></rss>