<?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[Schlechter Programmierstil]]></title><description><![CDATA[<p>Hallo,</p>
<p>meine Frage ist, ob es schlechter Programmierstil ist, einen Vergleichsoperator für eine Klasse zu überladen, der als Parameter nicht ein Objekt der Klasse erhält.<br />
Ich gebe mal ein Beispiel:</p>
<pre><code class="language-cpp">// auto.h
#include &lt;string&gt;

class AUTO {
private:
    std::string kennzeichen;
    std::string marke;
    std::string produkt;

public:
    AUTO(const std::string _kennzeichen,
         const std::string _marke,
         const std::string _produkt);

    // Achtung - der Operator der kein AUTO als Parameter erwartet
    bool operator ==(const std::string _kennzeichen) const;
};
</code></pre>
<pre><code class="language-cpp">// auto.cpp
#include &quot;auto.h&quot;

AUTO::AUTO(const std::string _kennzeichen,
           const std::string _marke,
           const std::string _produkt) : kennzeichen(_kennzeichen),
                                         marke(_marke),
                                         produkt(_produkt) {}

bool AUTO::operator ==(const std::string _kennzeichen) const {
    return kennzeichen == _kennzeichen;
}
</code></pre>
<p>Der ==-Operator vergleicht hier also die Kennzeichen und gibt true zurück, wenn die Kennzeichen übereinstimmen.</p>
<p>a) ist das schlechter Programmierstil?<br />
b) ist es schlechter Programmierstil später in einer Liste von AUTO-Objekten sowas zu machen: <code>std::find(auto_list.begin(), auto_list.end(), &quot;ABC-123456&quot;);</code></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240252/schlechter-programmierstil</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:57:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240252.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 May 2009 11:13:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 11:13:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>meine Frage ist, ob es schlechter Programmierstil ist, einen Vergleichsoperator für eine Klasse zu überladen, der als Parameter nicht ein Objekt der Klasse erhält.<br />
Ich gebe mal ein Beispiel:</p>
<pre><code class="language-cpp">// auto.h
#include &lt;string&gt;

class AUTO {
private:
    std::string kennzeichen;
    std::string marke;
    std::string produkt;

public:
    AUTO(const std::string _kennzeichen,
         const std::string _marke,
         const std::string _produkt);

    // Achtung - der Operator der kein AUTO als Parameter erwartet
    bool operator ==(const std::string _kennzeichen) const;
};
</code></pre>
<pre><code class="language-cpp">// auto.cpp
#include &quot;auto.h&quot;

AUTO::AUTO(const std::string _kennzeichen,
           const std::string _marke,
           const std::string _produkt) : kennzeichen(_kennzeichen),
                                         marke(_marke),
                                         produkt(_produkt) {}

bool AUTO::operator ==(const std::string _kennzeichen) const {
    return kennzeichen == _kennzeichen;
}
</code></pre>
<p>Der ==-Operator vergleicht hier also die Kennzeichen und gibt true zurück, wenn die Kennzeichen übereinstimmen.</p>
<p>a) ist das schlechter Programmierstil?<br />
b) ist es schlechter Programmierstil später in einer Liste von AUTO-Objekten sowas zu machen: <code>std::find(auto_list.begin(), auto_list.end(), &quot;ABC-123456&quot;);</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705221</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 04 May 2009 11:13:49 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 11:16:47 GMT]]></title><description><![CDATA[<p>Ich denke es ist irgendwie unnatürlich.<br />
Ich würde eher Funktionen dazu schreiben.</p>
<p>Für das suchen in der Liste kannst Du ja ein einfacher Funktor schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705223</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 04 May 2009 11:16:47 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 11:28:06 GMT]]></title><description><![CDATA[<p>Identifier sollten nicht mit _ beginnen, diese Namen sind für den Compiler reserviert.<br />
Außerdem würde ich ja sagen, mach lieber ein bool hat_kennzeichen(std::string const&amp; kennzeichen) const;<br />
Wobei es nicht grundsätzlich so ist, eine Komplexe Zahl mit einem Integer zu vergleichen wäre eher natürlich, weil beides eine Zahl ist, aber ein Auto hat ein Kennzeichen und hat nichts mit ihm gemeinsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705232</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Mon, 04 May 2009 11:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 11:41:54 GMT]]></title><description><![CDATA[<p>JustAnotherNoob schrieb:</p>
<blockquote>
<p>Identifier sollten nicht mit _ beginnen, diese Namen sind für den Compiler reserviert.</p>
</blockquote>
<p>Das stimmt so pauschal nur, wenn nach dem _ ein Großbuchstabe oder ein zweiter _ kommt. Namen mit _kleinbuchstabe sind nur reserviert, wenn sie external linkage haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705240</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 04 May 2009 11:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 11:54:37 GMT]]></title><description><![CDATA[<p>Faustregel für Vergleichsoperatoren: Sie sind nur sinnvoll wenn sie ineinander umwandelbar sind (z.B. verschiedene Zahlentypen, abgeleitete Klassen etc.). Ein Auto ist aber kein Kennzeichen, genauso ist ein Kennzeichen kein Auto. Ergo kann ein Kennzeichen nicht gleich einem Auto sein.<br />
Ich würde eine von den zwei folgenden Varianten nehmen:<br />
- eine Methode <code>bool hatKennzeichen(std::string const&amp; kennzeichen)</code><br />
oder, wenn das Kennzeichen eh des öfteren gelesen werden muss<br />
- eine Methode <code>std::sting const&amp; getKennzeichen()</code> , die das Kennzeichen zurückgibt (und dann einen normalen String-Vergleich)</p>
<p>/edit:<br />
zu den Unterstichen:</p>
<blockquote>
<p>17.4.3.1.2 Global names [lib.global.names]<br />
1 Certain sets of names and function signatures are always reserved to the implementation:</p>
<p>Each name that contains a double underscore (_ _) or begins with an underscore followed by an upper case letter (2.11) is reserved to the implementation for any use.<br />
Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace. Such names are also reserved in namespace ::std</p>
</blockquote>
<p>ja, Unterstriche mit folgenden Kleinbuchstaben <em>kann</em> man unter bestimmten Umständen verwenden. Man <em>kann</em> sich natürlich diese Ausnahmen von der Regel merken und führende Unterstriche benutzen - und bei Gelegenheit auf die Nase fallen wenn man die Ausnahme doch nicht ganz richtig im Kopf hatte. Einfacher ists, gänzlich auf führende Unterstriche zu verzichten, das beschränkt einen nicht merklich in der Wahl der Variablennamen. Imho iriitieren sie eh nur und schränken die Lesbarkeit ein, das Auge stolpert einfach drüber beim Lesen.</p>
<p>Einen Punkt habe ich noch, den ich auch als zumindest ungewöhnlichen Stil bewerte: Bezeichner die ausschließlich in Großbuchstaben geschrieben werden, sind in den meisten Coding-Standards für Makros und evtl. statische Konstanten und/oder enums reserviert. Der Klassenname AUTO verstößt gegen diese inoffizielle Konvention und ist daher für viele auch ein Stolperstein beim Lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705242</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 04 May 2009 11:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Mon, 04 May 2009 13:45:57 GMT]]></title><description><![CDATA[<p>Zudem bringt</p>
<pre><code class="language-cpp">const std::string _kennzeichen
</code></pre>
<p>nicht sehr viel. Erstens wird eine unnötigte Kopie angelegt (von Optimierungen, auf die man sich nicht verlassen kann, abgesehen). Zweitens kann es dem Aufrufer eigentlich relativ egal sein, ob die Kopie innerhalb der Funktion verändert wird, von daher finde ich <code>const</code> -Parameter nicht wirklich sinnvoll.</p>
<p>Was eine Kopie vermeidet und auch eher eingesetzt wird, ist eine Referenz auf einen <code>const std::string</code> :</p>
<pre><code class="language-cpp">const std::string&amp; kennzeichen // oder
std::string const&amp; kennzeichen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1705328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705328</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 May 2009 13:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Tue, 05 May 2009 13:12:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke euch für die Antworten.<br />
Zu der Idee mit dem Funktor habe ich jetzt noch mal eine Frage - auch Programmierstil bedingt.</p>
<p>Schreibt man für verschiedene Eigenschaften verschiedene Funktoren, oder kann man einen verwenden, der eben noch einen Wert übergeben bekommt, der angibt welche Daten verglichen werden sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705869</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 May 2009 13:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to Schlechter Programmierstil on Tue, 05 May 2009 13:15:44 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>Schreibt man für verschiedene Eigenschaften verschiedene Funktoren</p>
</blockquote>
<p>ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705874</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 05 May 2009 13:15:44 GMT</pubDate></item></channel></rss>