<?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 mit Vererbung]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe zwei Klassen Anton und Berta, wobei Berta von Anton erbt. Beide Klassen sollen nun den + Operator überladen:</p>
<pre><code class="language-cpp">class Anton {
public:
  friend Anton operator+(const Anton &amp;ant1, const Anton &amp;ant2);
private:
  int wert1;
  int wert2;
}

Anton operator+(const Anton &amp;ant1, const Anton &amp;ant2) {
  Anton result = ant1;
  result.wert1 += ant2.wert1;
  return result;
}
</code></pre>
<p>Der überladene Operator soll wert1 summieren, wert2 jedoch komplett übernehmen.<br />
Angenommen Berta fügt nun noch zwei weitere Membervariablen wert3 und wert4 hinzu:</p>
<pre><code class="language-cpp">class Berta:Anton {
public:
  friend Berta operator+(const Berta &amp;ber1, const Berta &amp;ber2);
private:
  int wert3;
  int wert4;

}

Berta operator+(const Berta &amp;ber1, const Berta &amp;ber2) {
  Berta result = ber1;
  ... //Hier brauche ich Hilfe
}
</code></pre>
<p>Auch hier soll gelten, dass wert4 übernommen, wert3 summiert wird.</p>
<p>Wie kann ich nun erreichen, dass ich in der +Operatorüberladung von Berta nicht noch einmal die Operation von der +Operatorüberladung von Anton neu implementieren muss? Der Grund für meine Frage ist, dass in meiner Software genau dieser Fall auftritt und die Implementierung des +Operators der Antonklasse schon recht umfangreich ist und ich versuche, Codeduplikate zu vermeiden.</p>
<p>Schönen Gruß,<br />
Christoph</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253579/operatorüberladung-mit-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 11:48:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253579.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Nov 2009 11:43:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Wed, 04 Nov 2009 11:43:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe zwei Klassen Anton und Berta, wobei Berta von Anton erbt. Beide Klassen sollen nun den + Operator überladen:</p>
<pre><code class="language-cpp">class Anton {
public:
  friend Anton operator+(const Anton &amp;ant1, const Anton &amp;ant2);
private:
  int wert1;
  int wert2;
}

Anton operator+(const Anton &amp;ant1, const Anton &amp;ant2) {
  Anton result = ant1;
  result.wert1 += ant2.wert1;
  return result;
}
</code></pre>
<p>Der überladene Operator soll wert1 summieren, wert2 jedoch komplett übernehmen.<br />
Angenommen Berta fügt nun noch zwei weitere Membervariablen wert3 und wert4 hinzu:</p>
<pre><code class="language-cpp">class Berta:Anton {
public:
  friend Berta operator+(const Berta &amp;ber1, const Berta &amp;ber2);
private:
  int wert3;
  int wert4;

}

Berta operator+(const Berta &amp;ber1, const Berta &amp;ber2) {
  Berta result = ber1;
  ... //Hier brauche ich Hilfe
}
</code></pre>
<p>Auch hier soll gelten, dass wert4 übernommen, wert3 summiert wird.</p>
<p>Wie kann ich nun erreichen, dass ich in der +Operatorüberladung von Berta nicht noch einmal die Operation von der +Operatorüberladung von Anton neu implementieren muss? Der Grund für meine Frage ist, dass in meiner Software genau dieser Fall auftritt und die Implementierung des +Operators der Antonklasse schon recht umfangreich ist und ich versuche, Codeduplikate zu vermeiden.</p>
<p>Schönen Gruß,<br />
Christoph</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803111</guid><dc:creator><![CDATA[toffkriss]]></dc:creator><pubDate>Wed, 04 Nov 2009 11:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Thu, 05 Nov 2009 10:00:49 GMT]]></title><description><![CDATA[<p>Wie versprochen: snip! ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803117</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 05 Nov 2009 10:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Wed, 04 Nov 2009 12:58:35 GMT]]></title><description><![CDATA[<p>Da hab ich auch schon drüber nachgedacht, bloß dann wäre es fast sauberer, ganz auf die Überladung zu verzichten und gleich eine eigene Memberfunktion zu veröffentlichen, die die Summation übernimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803154</guid><dc:creator><![CDATA[toffkriss]]></dc:creator><pubDate>Wed, 04 Nov 2009 12:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Wed, 04 Nov 2009 13:21:18 GMT]]></title><description><![CDATA[<p>toffkriss schrieb:</p>
<blockquote>
<p>wäre es fast sauberer, ganz auf die Überladung zu verzichten und gleich eine eigene Memberfunktion zu veröffentlichen, die die Summation übernimmt.</p>
</blockquote>
<p>Stimmt, z.B. einen operator+=:</p>
<pre><code class="language-cpp">class Anton : public boost::addable&lt;Anton&gt;
{
public:
  Anton&amp; operator+=(Anton const&amp; rhs)
  {
    /* ... */
    return *this;
  }
private:
  int wert1;
  int wert2;
};

class Berta : public boost::addable1&lt;Berta, Anton&gt;
{
public:
  Berta&amp; operator+= (Berta const&amp; rhs)
  {
    Anton::operator+=(rhs); //aufruf für den Basisklassenteil
    /* ... */
    return *this;
  }
private:
  int wert3;
  int wert4;
}:
</code></pre>
<p>für die boost-Teile siehe meine beiden Artikel über boost::operators, die einem die Arbeit abnehmen. Achtung: bei berta muss explizit addable1 genutzt werden (siehe <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%203%29%20-%20boost%3A%3Aoperators%20f%FCr%20Fortgeschrittene" rel="nofollow">hier</a>, Punkt 3.3)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803175</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 04 Nov 2009 13:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Thu, 05 Nov 2009 07:48:14 GMT]]></title><description><![CDATA[<p>Hmm, das scheint mir im Moment die beste Lösung zu sein. Das wäre natürlich schade, denn der +Operator würde meinem Projekt wesentlich besser zu Gesicht stehen. Naja, man kann ja seinen Quellcode immer noch schöndokumentieren. Falls ich doch noch ne andere Lösung finde, dann werde ich sie hier posten. Vielen Dank erstmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803584</guid><dc:creator><![CDATA[toffkriss]]></dc:creator><pubDate>Thu, 05 Nov 2009 07:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Thu, 05 Nov 2009 08:23:28 GMT]]></title><description><![CDATA[<p>schau dir die artikel an - du bekommst den operator+ durch die boost-sache mit. Alternativ kannst du den operator immer ganz einfach durch oerator+= implementieren:</p>
<pre><code class="language-cpp">A operator+ (A const&amp; lhs, A const&amp; rhs)
{
  A tmp(lhs);
  tmp += rhs;
  return tmp;
}
</code></pre>
<p>steht im ersten Artikel der Reihe auch drin <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/1803603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803603</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 05 Nov 2009 08:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung mit Vererbung on Sat, 07 Nov 2009 13:11:25 GMT]]></title><description><![CDATA[<p>Jau, ich werd mich dann erstmal den +=Operator zur Hilfe nehmen. Vielleicht fällt mir ja irgendwann noch was anderes ein oder so. Schönen Dank für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1804798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1804798</guid><dc:creator><![CDATA[toffkriss]]></dc:creator><pubDate>Sat, 07 Nov 2009 13:11:25 GMT</pubDate></item></channel></rss>