<?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, wie implementieren?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal gehört, das man Operatoren in der Klasse implementieren soll und andere wiederrum über diese außerhalb einer Klasse.</p>
<p>Also z. B.:</p>
<pre><code class="language-cpp">operator += //soll in der Klasse implementiert sein,

operator + //soll außerhalb der Klasse implementiert werden, jedoch intern auf den operator += der Klasse zugreifen.

operator == //soll außerhalb der Klasse implementiert werden.
</code></pre>
<p>Jetzt meine Frage: warum sollte man es so machen, wo liegen die Gründe dafür und welche Vorteile/Nachteile bringt es mit sich?</p>
<p>Danke euch vielmals im voraus. <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>
<p>Viele liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218974/operatoren-wie-implementieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:27:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218974.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Jul 2008 07:05:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 07:05:27 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal gehört, das man Operatoren in der Klasse implementieren soll und andere wiederrum über diese außerhalb einer Klasse.</p>
<p>Also z. B.:</p>
<pre><code class="language-cpp">operator += //soll in der Klasse implementiert sein,

operator + //soll außerhalb der Klasse implementiert werden, jedoch intern auf den operator += der Klasse zugreifen.

operator == //soll außerhalb der Klasse implementiert werden.
</code></pre>
<p>Jetzt meine Frage: warum sollte man es so machen, wo liegen die Gründe dafür und welche Vorteile/Nachteile bringt es mit sich?</p>
<p>Danke euch vielmals im voraus. <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>
<p>Viele liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554896</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Mon, 28 Jul 2008 07:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 07:12:22 GMT]]></title><description><![CDATA[<p>Ich mache immer das was einfacher ist.<br />
Wenn ich eine Klasse neu schreibe dann implementiere ich alles innerhalb.<br />
Wegen der Übersichtlichkeit.<br />
Wenn ich aber z.B. möchte dass meine Klasse per cout ausgegeben werden kann<br />
dann wäre es äußerst schwierig, dass im nachinein in den ostream einzubauen.<br />
Darum implementiere ich es dann immer außerhalb als Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554898</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Mon, 28 Jul 2008 07:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 07:16:23 GMT]]></title><description><![CDATA[<p>z.B. kannst du mit operator+ folgendes machen:</p>
<pre><code class="language-cpp">const A operator+( const A&amp;, int);
const A operator+( int, const A&amp;);

A x;
A y;

y = x + 5;
y = 5 + x;
</code></pre>
<p>Das geht mit einem Member nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554900</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 28 Jul 2008 07:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 07:36:25 GMT]]></title><description><![CDATA[<p>Gibt es irgendwo lesestoff darüber? denn das was ihr hier sagt, ist mir leider noch zu waage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554909</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Mon, 28 Jul 2008 07:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 07:45:27 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Gibt es irgendwo lesestoff darüber? denn das was ihr hier sagt, ist mir leider noch zu waage.</p>
</blockquote>
<p>nix wage.</p>
<p>nachdenken:</p>
<p>operator==(int, Klasse)<br />
operator+(int, Klasse)</p>
<p>wie willst du diese beiden als member implementieren?<br />
Es geht nicht.</p>
<p>mal davon abgesehen dass man nur was man unbedingt muss als member machen sollte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554913</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 28 Jul 2008 07:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:04:48 GMT]]></title><description><![CDATA[<p>Komisch, hier werden aber haufenweise Operatoren in der Klasse implementiert:</p>
<pre><code class="language-cpp">33 typedef struct D3DXVECTOR2
 34 {
 35 #ifdef __cplusplus
 36     D3DXVECTOR2();
 37     D3DXVECTOR2(CONST FLOAT *pf);
 38     D3DXVECTOR2(FLOAT fx, FLOAT fy);
 39 
 40     operator FLOAT* ();
 41     operator CONST FLOAT* () const;
 42 
 43     D3DXVECTOR2&amp; operator += (CONST D3DXVECTOR2&amp;);
 44     D3DXVECTOR2&amp; operator -= (CONST D3DXVECTOR2&amp;);
 45     D3DXVECTOR2&amp; operator *= (FLOAT);
 46     D3DXVECTOR2&amp; operator /= (FLOAT);
 47 
 48     D3DXVECTOR2 operator + () const;
 49     D3DXVECTOR2 operator - () const;
 50 
 51     D3DXVECTOR2 operator + (CONST D3DXVECTOR2&amp;) const;
 52     D3DXVECTOR2 operator - (CONST D3DXVECTOR2&amp;) const;
 53     D3DXVECTOR2 operator * (FLOAT) const;
 54     D3DXVECTOR2 operator / (FLOAT) const;
 55 
 56     friend D3DXVECTOR2 operator * (FLOAT, CONST D3DXVECTOR2&amp;);
 57 
 58     BOOL operator == (CONST D3DXVECTOR2&amp;) const;
 59     BOOL operator != (CONST D3DXVECTOR2&amp;) const;
 60 #endif /* __cplusplus */
 61     FLOAT x, y;
 62 } D3DXVECTOR2, *LPD3DXVECTOR2;
 63
</code></pre>
<p>Zeile 43-59</p>
<p>Viele liebe Grüße</p>
<p>p.s.: Euer Spamschutz ist scheisse, beantwortet man die Frage richtig, kommt die Meldung, das kein Thema ausgewählt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554924</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:09:48 GMT]]></title><description><![CDATA[<p>Es ist ja auch nicht &quot;falsch&quot; in dem Sinne.</p>
<p>Das Stichwort ist Symmetrie bei Operatoren. Wenn du Symmetrie brauchst, musst du sie außerhalb der Klasse implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554931</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:11:21 GMT]]></title><description><![CDATA[<p>@ 7H3 N4C3R<br />
Was kann man unter &quot;Symmetrie der Operatoren&quot; verstehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554933</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:11:21 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:22:53 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Gibt es irgendwo lesestoff darüber?</p>
</blockquote>
<p>Ja hier: <a href="http://www.boost.org/doc/libs/1_35_0/libs/utility/operators.htm" rel="nofollow">boost.operators</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554938</guid><dc:creator><![CDATA[boost]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:39:19 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Komisch, hier werden aber haufenweise Operatoren in der Klasse implementiert:</p>
<pre><code class="language-cpp">33 typedef struct D3DXVECTOR2
 34 {
 35 #ifdef __cplusplus 
 36     ...
</code></pre>
</blockquote>
<p>Das ist ja auch DirectX-Geraffel - bekanntermaßen von Anfängern geschrieben - das sieht man schon an dem 'typedef struct' und dann #ifdef __cplusplus - das sagt doch schon alles!<br />
und was ist überhaupt</p>
<pre><code class="language-cpp">CONST
</code></pre>
<p>??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554942</guid><dc:creator><![CDATA[Kenner_von_DirectX]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:39:30 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>@ 7H3 N4C3R<br />
Was kann man unter &quot;Symmetrie der Operatoren&quot; verstehen?</p>
</blockquote>
<p>Du schreibst z.B.</p>
<p>Klasse = int + Klasse</p>
<p>Damit du das mit Member-Operatoren implementieren kannst, müsstest du int um einen +-Operator für &quot;Klasse&quot; erweitern. Zum einen ist int keine Klasse, geht also garnicht, zum anderen hat int mit &quot;Klasse&quot; rein garnix zu tun.</p>
<p>Also wird im selben Header wie &quot;Klasse&quot; <strong>und</strong> im selben Namespace wie &quot;Klasse&quot; ein freier +-Operator geschrieben, der einen int als erstes Argument übernimmt. Mit einer Implementierung als Member müsste das erste Argument immer &quot;Klasse&quot; sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554943</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to operatoren, wie implementieren? on Mon, 28 Jul 2008 08:50:13 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Jetzt meine Frage: warum sollte man es so machen, wo liegen die Gründe dafür und welche Vorteile/Nachteile bringt es mit sich?</p>
</blockquote>
<p>Der Hauptgrund ist die impilizite Konvertierung des ertsen Arguments. Sagen wir du hast zwei Typen, Foo und Bar. Foo ist implizit in Bar konvertierbar (d.h. du hast einen Castoperator in Foo oder einen nicht-expliziten Konstruktor in Bar der ein Foo annimmt oder Foo abgeleitet von Bar).<br />
Die operatoren von Bar sollten dann wie von dir genannt implementiert werden (f hat diese operatoren NCIHT implementiert):</p>
<pre><code class="language-cpp">Bar b;
Foo f;

b += f; //ok, ruft Bar::operator+=(Bar) auf, f wird konvertiert.
if (b == f) //ok, ruft operator==(Bar, Bar) auf oder Bar::operator==(Bar) , f konvertiert
  return b + f; //operator+(Bar, Bar) bzw. Bar::operator+(Bar) mit Konvertierung
if(f == b) //geht nur mit operator+(Bar,Bar), da das erste Argument konvertiert werden muss!
  return f + b; //dito, Bar::operator+(Bar) könnte nicht aufgerufen werden, da das this-Argument nicht konvertiert werden kann
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1554946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554946</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 28 Jul 2008 08:50:13 GMT</pubDate></item></channel></rss>