<?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[hätte gern Tips zur Klasse]]></title><description><![CDATA[<pre><code class="language-cpp">class CTest {
   int num;
public:
   CTest() {};
   CTest(const int num) { num = this-&gt;num; };

   bool operator==(const CTest&amp; obj) {return (this-&gt;num == obj.num); };

   // wenn die untere zeile integriert ist, wird die 2. ctor nicht mehr aufgerufen
   bool operator==(const int&amp; num) {return (this-&gt;num == num); };
};

// main.cpp
CTest test(10);
cout &lt;&lt; (test == 20) &lt;&lt; endl; // hier wird die 2. ctor aufgerufen
</code></pre>
<p>meine frage ist, ob ich lieber folgende operator integriere soll oder nicht, weil ohne den auch funktioniert, aber eben nur immer die 2. ctor aufruft.</p>
<pre><code class="language-cpp">bool operator==(const int&amp; num) {return (this-&gt;num == num); };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/242235/hätte-gern-tips-zur-klasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 02:45:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242235.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Jun 2009 13:14:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:14:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class CTest {
   int num;
public:
   CTest() {};
   CTest(const int num) { num = this-&gt;num; };

   bool operator==(const CTest&amp; obj) {return (this-&gt;num == obj.num); };

   // wenn die untere zeile integriert ist, wird die 2. ctor nicht mehr aufgerufen
   bool operator==(const int&amp; num) {return (this-&gt;num == num); };
};

// main.cpp
CTest test(10);
cout &lt;&lt; (test == 20) &lt;&lt; endl; // hier wird die 2. ctor aufgerufen
</code></pre>
<p>meine frage ist, ob ich lieber folgende operator integriere soll oder nicht, weil ohne den auch funktioniert, aber eben nur immer die 2. ctor aufruft.</p>
<pre><code class="language-cpp">bool operator==(const int&amp; num) {return (this-&gt;num == num); };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1719055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719055</guid><dc:creator><![CDATA[JnZn558]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:21:04 GMT]]></title><description><![CDATA[<p>Spielt keine Rolle. Ich persönlich würde den ctor bevorzugen, ansonsten ist das nur unnötiger Aufwand. Wenn du das aber nicht implizit erlauben willst, kannst du den ctor auch <code>explicit</code> machen. Dann muss man die Umwandlung selbst programmieren.</p>
<p>btw:<br />
Im ctor würde ich die Initialisierungsliste benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719060</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:21:20 GMT]]></title><description><![CDATA[<p>Ich würde nur einen Gleichheitsoperator, dafür einen globalen implementieren:</p>
<pre><code class="language-cpp">bool operator== (const CTest&amp; Left, const CTest&amp; Right)
{
    return Left.GetNum() == Right.GetNum(); 
    // erfordert Getter (brauchst du den nicht ohnehin?)
    // sonst evtl. mit friend
}
</code></pre>
<p>Sobald du nämlich beginnst, Operatoren für unterschiedliche Typen zu schreiben, geht die Memberfunktions-Version nicht mehr kommutativ. Also funktioniert <code>a == b</code> , nicht aber <code>b == a</code> .</p>
<p>Zudem solltest du für deinen Konstruktor besser die Initialisierungsliste verwenden:</p>
<pre><code class="language-cpp">CTest::CTest(int num)
: num(num)
{

}
</code></pre>
<p>Auch das <code>const</code> als Parameter macht nicht viel Sinn, da sowieso eine Kopie erstellt wird. Dem Aufrufer kann es eigentlich egal sein, ob diese Kopie von der Funktion verändert wird oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719063</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:24:35 GMT]]></title><description><![CDATA[<p>danke sehr für tipps, werde se mal ausprobieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719068</guid><dc:creator><![CDATA[JnZn558]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:27:28 GMT]]></title><description><![CDATA[<p>zu deiner Frage: Ich würd den operator erstmal weglassen, ohne gehts auch. Der Operator würde nur das Interface unnötig vergrößern, und der Vorteil ist eher eine Mikro-Optimierung, die der Compiler evtl. sogar von selbst hinbekommt.</p>
<p>Dann solltest du dir unbedingt nochmal deinen Konstruktor anschauen. Der tut nämlich nicht was du gewollt hast. In dem Zusammenhang schau im Tutorial/Buch deiner Wahl mal nach &quot;Initialisierungsliste&quot;.</p>
<p>Dann würde ich den operator zu einer freien Funktion machen. Damit kann dann auch das erste Argument bei Bedarf von einem int in ein CTest umgewandelt werden. Siehe auch hier: <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)</a></p>
<p>Dann gibts noch ne Sache: <code>const int</code> als Parameter ist nicht unbedingt gebräuchlich. Da der int eh eine Kopie ist, kannst du das const weglassen. <code>const int&amp;</code> als Parameter ist ebenso unüblich, weil eine Referenz ähnlich teuer ist wie eine ganz normale Kopie eines int. Allgemein werden bei &quot;kleinen&quot; Typen (alle eingebauten Typen und kleine PODs) eher Kopien als const Referenzen übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719073</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to hätte gern Tips zur Klasse on Mon, 01 Jun 2009 13:31:52 GMT]]></title><description><![CDATA[<p>Ach ja, noch was:<br />
Wenn du den <code>operator==</code> anbietest, solltest du auch einen <code>operator!=</code> implementieren, damit keine unangenehmen Überraschungen auftreten. Diese beiden Operatoren implizieren sich quasi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719076</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:31:52 GMT</pubDate></item></channel></rss>