<?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]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir einer von euch erklären, wann ich Operatoren global oder per Elementunktion überlade und warum?</p>
<p>Hab mir das zwar angeguckt aber verstehe es nicht so richtig ... plz Help me</p>
<p>thx im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/137378/operatoren-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 20:46:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137378.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Feb 2006 22:24:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatoren Überladen on Thu, 16 Feb 2006 22:24:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir einer von euch erklären, wann ich Operatoren global oder per Elementunktion überlade und warum?</p>
<p>Hab mir das zwar angeguckt aber verstehe es nicht so richtig ... plz Help me</p>
<p>thx im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996297</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 16 Feb 2006 22:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Thu, 16 Feb 2006 23:22:40 GMT]]></title><description><![CDATA[<p>Ich würde sagen man macht den Operator dann global, wenn der 1. Operand auch einen anderen Typ als *this besitzen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996317</guid><dc:creator><![CDATA[interpreter]]></dc:creator><pubDate>Thu, 16 Feb 2006 23:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Mon, 20 Feb 2006 14:35:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich werde's dir am Beispiel einer Wrapper-Klasse für ints erlären:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Integer {
  int value;

public:
  //Ctors, Dtor
  Integer(int i=0) : value(i) {}
  Integer(const Integer &amp;rhs) : value(rhs.value) {}
  ~Integer() {}

  int getValue() const { return value; }
  void setValue(int i) { value = i; }

  //Zuweisungs-Op
  Integer&amp; operator=(const Integer &amp;rhs) {
    if (&amp;rhs == this)  //Selbstzuweisung?
      return *this;
    value = rhs.value;
    return *this;
  }

  //Bauen wir den + Op mal als member ein, und sehen was passiert:
  Integer operator+(const Integer &amp;rhs) {
    return Integer(this-&gt;value + rhs.value);
  }
};

//Global-überladener Ausgabe-Op, erstmal unwichtig
ostream&amp; operator&lt;&lt;(ostream &amp;os, const Integer &amp;i) {
  return os&lt;&lt;i.getValue();
}

int main() {
  Interger i(5), j(7), result(0);  //Drei Integer instanziert
  result = i + j;  //Klappt, da beide Operatoren vom Typ Integer sind, eigentlicher Aufruf i.operator+(j)

  result = i + 9;  //Klappt, erster Operand vom Typ Integer, zweiter vom Typ int, der wird (implizit) über den ersten Ctor in 
                   //ein Integer konvertiert, eigentlicher Aufruf lautet: i.operator+(Integer(9))

  result = 9 + j;  //uh oh, klappt nicht, da 9 nicht vom Typ Integer ist, ausgeschrieben bedeutet dieser Aufruf nämlich: 9.operator+(j) !!

  result = 1 + 2; //Klappt, weil der eingebaute + operator benutzt wird ;-)
  return 0;
}
</code></pre>
<p>Du siehst also, implementieren wir den + Op als Memberfunktion, muss unser linker Operand vom Typ Integer sein.</p>
<p>Abhilfe schafft hier die globale Überladung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Integer {
  int value;

public:
  //Ctors, Dtor
  Integer(int i=0) : value(i) {}
  Integer(const Integer &amp;rhs) : value(rhs.value) {}
  ~Integer() {}

  int getValue() const { return value; }
  void setValue(int i) { value = i; }

  //Zuweisungs-Op
  Integer&amp; operator=(const Integer &amp;rhs) {
    if (&amp;rhs == this)  //Selbstzuweisung?
      return *this;
    value = rhs.value;
    return *this;
  }
};

//Jetzt global:
Integer operator+(const Integer &amp;lhs, const Integer &amp;rhs) {
  return Integer(lhs.getValue()+rhs.getValue());
};

//Global überladener Ausgabe-Op, erstmal unwichtig
ostream&amp; operator&lt;&lt;(ostream &amp;os, const Integer &amp;i) {
  return os&lt;&lt;i.getValue();
}

int main() {
  Interger i(5), j(7), result(0);  //Drei Integer instanziert
  result = i + j;  //Klappt, da beide Operatoren vom Typ Integer sind, eigentlicher Aufurf: operator+(i,j)

  result = i + 9;  //Klappt, eigentlicher Aufruf lautet: operator+(i, Integer(9))
  result = 9 + j;  //Klappt, eigentlicher Aufruf: operator+(Integer(9),j)

  result = 1 + 2; //Klappt, ruft den eingebauten + op für int's auf (Greetz @ CStoll  :D )
  return 0;
}
</code></pre>
<p>Somit können wir den + Op auch benutzen, wenn der linke (oder beide) Operand(en) nicht vom Typ Integer sind.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996529</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 20 Feb 2006 14:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Fri, 17 Feb 2006 18:00:30 GMT]]></title><description><![CDATA[<p><a href="http://www.gotw.ca/gotw/004.htm" rel="nofollow">http://www.gotw.ca/gotw/004.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/996907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996907</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 17 Feb 2006 18:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Fri, 17 Feb 2006 18:01:18 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=1819" rel="nofollow">kingruedi</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=8" rel="nofollow">Rund um die Programmierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/996908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996908</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 17 Feb 2006 18:01:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Mon, 20 Feb 2006 14:28:16 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<pre><code class="language-cpp">result = 1 + 2; //Klappt, eigentlicher Aufruf: operator+(Integer(1), Integer(2))
</code></pre>
</blockquote>
<p>Falsch - das klappt schon, ruft aber definitiv nicht deinen operator+ auf, sondern den vordefinierten operator+ für int's (und anschließend den operator= und int-Ctor deiner Klasse - result.operator=(Integer(1+2));).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/998605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/998605</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 20 Feb 2006 14:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren Überladen on Mon, 20 Feb 2006 14:33:36 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<p>GPC schrieb:</p>
<blockquote>
<pre><code class="language-cpp">result = 1 + 2; //Klappt, eigentlicher Aufruf: operator+(Integer(1), Integer(2))
</code></pre>
</blockquote>
<p>Falsch - das klappt schon, ruft aber definitiv nicht deinen operator+ auf, sondern den vordefinierten operator+ für int's (und anschließend den operator= und int-Ctor deiner Klasse - result.operator=(Integer(1+2));).</p>
</blockquote>
<p>öh, hast recht. Da wird natürlich der built-in op für int's aufgerufen. War wohl so im op-Überladen drin, dass mir das nicht aufgefallen ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>gleich mal ändern gehn...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/998611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/998611</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 20 Feb 2006 14:33:36 GMT</pubDate></item></channel></rss>