<?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 überladen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgendes habe ich mit Microsoft Visual Studio 2008 programmiert:</p>
<p>class Mitglieder<br />
{<br />
bool operator!(const Mitglieder &amp;);<br />
};</p>
<p>Dabei erhalte ich die Fehlermeldung:<br />
Fehler 1 error C2808: Der unäre Operator '!' hat zu viele formale Parameter</p>
<p>Wenn ich einen anderen Operator benutze z.B. bool operator&gt;(const Mitglieder &amp;);<br />
funktioniert alles wunderbar, aber ich soll den Ausrufezeichen verwenden.</p>
<p>Wäre dankbar, wenn mir jemand sagen könnte, wie man diesen Operator überladen kann.</p>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230662/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 04:08:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230662.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Dec 2008 15:06:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 15:06:45 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgendes habe ich mit Microsoft Visual Studio 2008 programmiert:</p>
<p>class Mitglieder<br />
{<br />
bool operator!(const Mitglieder &amp;);<br />
};</p>
<p>Dabei erhalte ich die Fehlermeldung:<br />
Fehler 1 error C2808: Der unäre Operator '!' hat zu viele formale Parameter</p>
<p>Wenn ich einen anderen Operator benutze z.B. bool operator&gt;(const Mitglieder &amp;);<br />
funktioniert alles wunderbar, aber ich soll den Ausrufezeichen verwenden.</p>
<p>Wäre dankbar, wenn mir jemand sagen könnte, wie man diesen Operator überladen kann.</p>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637304</guid><dc:creator><![CDATA[Leonidas08]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 15:12:12 GMT]]></title><description><![CDATA[<p>Der <code>operator!</code> ist unär, nimmt also nur einen Parameter. Wenn du ihn in der Klasse deklarierst, ist der erste Parameter bereits implizit ein Objekt der Klasse.</p>
<p>Mach den Operator also global:</p>
<pre><code class="language-cpp">Mitglieder operator! (const Mitglieder&amp; Value);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1637309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637309</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 15:15:27 GMT]]></title><description><![CDATA[<p>Der <code>operator!</code> ist unär, nimmt also nur einen Parameter. Wenn du ihn in der Klasse deklarierst, ist der erste Parameter bereits implizit <code>*this</code> .</p>
<p>Mach den Operator also ohne expliziten Parameter:</p>
<pre><code class="language-cpp">class Mitglieder 
{ 
bool operator!() const; 
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1637312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637312</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 15:18:36 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Der <code>operator!</code> ist unär, nimmt also nur einen Parameter. Wenn du ihn in der Klasse deklarierst, ist der erste Parameter bereits implizit [...]</p>
</blockquote>
<p>Ein wenig viel abgeschrieben, nicht? :p</p>
<p>Aber stimmt, <code>*this</code> ist besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637317</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 16:26:18 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Der <code>operator!</code> ist unär, nimmt also nur einen Parameter. Wenn du ihn in der Klasse deklarierst, ist der erste Parameter bereits implizit ein Objekt der Klasse.</p>
<p>Mach den Operator also global:</p>
<pre><code class="language-cpp">Mitglieder operator! (const Mitglieder&amp; Value);
</code></pre>
</blockquote>
<p>Unäre Operatoren sollten in den meisten Fällen als Klassenmethoden implementiert werden, um implizite Konvertierungen des Arguments zu vermeiden. Beispiel:</p>
<pre><code class="language-cpp">class Mitglieder
{
public:
  Mitglieder(Person const&amp; pers);
};
bool operator! (Mitglieder const&amp; mtgl);

//....
Person Franzl;
if (!Franzl) //ups, das geht ja!
{
  /*...*/
}
</code></pre>
<p>volkards Beispiel ist also die bessere Wahl für onäre Operatoren im Allgemeinen.</p>
<p>Was die Überladung des op! im Speziellen angeht gibts meist bessere Alternativen. Wenn du die Objekte deiner Mitglieder-Klasse in einem boolschen Kontext auswerten willst (z.B. wie oben in der if-Abfrage), ist meist das Safe-Bool-Idiom die bessere Wahl, da man mit de op! nur negative Abfragen ermöglicht:</p>
<pre><code class="language-cpp">Mitglieder Mitgl;
if (!Mitgl); //OK
if (Mitgl); //Fehler!
if (!!Mitgl); //Doppelte Verneinung klapt zwar, sieht aber nicht so dolle aus
</code></pre>
<p><a href="http://www.artima.com/cppsource/safebool.html" rel="nofollow">http://www.artima.com/cppsource/safebool.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637359</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 30 Dec 2008 16:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 16:31:12 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Unäre Operatoren sollten in den meisten Fällen als Klassenmethoden implementiert werden, um implizite Konvertierungen des Arguments zu vermeiden.</p>
</blockquote>
<p>Okay, das geht aber auch mit einem expliziten Konstruktor. Das wäre bei diesem Beispiel sowieso nützlich, da man womöglich auch andere impliziten Konvertierungen vermeiden will.</p>
<p>Ich finde, dass Operatoren, die nichts an der Klasse ändern und auch nicht auf private Variablen zugreifen, eher global gemacht werden sollten (generell Funktionen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637364</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 16:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Tue, 30 Dec 2008 16:38:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ich finde, dass Operatoren, die nichts an der Klasse ändern und auch nicht auf private Variablen zugreifen, eher global gemacht werden sollten (generell Funktionen).</p>
</blockquote>
<p>Operatoren bzw. generell Funktionen, die weder an dem Objekt was ändern noch auf private Variablen zugreifen sind nur Hilfsfunktionen, weil sie das Interface der Klasse verbreitern ohne Funktionalität hinzuzufügen. Und solche Hilfsfunktionen sollten allgemein eher spärlich eingesetzt werden, z.B. wenn sie eine größere Menge an Operationen zusammenfassen. Allerdings sind Operatoren wegen ihrer üblichen Semantik meist nicht für slche Hilsfunktionen geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637369</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 30 Dec 2008 16:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to !Operator überladen on Thu, 01 Jan 2009 22:53:53 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten!</p>
<p>Es hat mir sehr weiter geholfen. Das Forum ist klasse. Ich werde mich hier registrieren.</p>
<p>PS: Frohes Neues <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/1638165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1638165</guid><dc:creator><![CDATA[Leonidas08]]></dc:creator><pubDate>Thu, 01 Jan 2009 22:53:53 GMT</pubDate></item></channel></rss>