<?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[Macro + UpperChar]]></title><description><![CDATA[<p>Hallo, kann ich in einem Macro wie diesem</p>
<pre><code>#define GETTER(type, name) \
	type [b]n[/b]ame() const { return name; }
</code></pre>
<p>Den ersten Buchstaben des in name übergebenen Strings in einen Großbuchstaben ändern? Wenn ja wie?</p>
<p>Wenn ich also</p>
<pre><code>GETTER(int, integer)
</code></pre>
<p>aufrufe, sollte mir der Prozessor</p>
<pre><code>int Integer() const { return integer; }
</code></pre>
<p>daraus machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282482/macro-upperchar</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 01:41:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282482.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Feb 2011 21:53:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 21:53:57 GMT]]></title><description><![CDATA[<p>Hallo, kann ich in einem Macro wie diesem</p>
<pre><code>#define GETTER(type, name) \
	type [b]n[/b]ame() const { return name; }
</code></pre>
<p>Den ersten Buchstaben des in name übergebenen Strings in einen Großbuchstaben ändern? Wenn ja wie?</p>
<p>Wenn ich also</p>
<pre><code>GETTER(int, integer)
</code></pre>
<p>aufrufe, sollte mir der Prozessor</p>
<pre><code>int Integer() const { return integer; }
</code></pre>
<p>daraus machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023969</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Sun, 20 Feb 2011 21:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:00:07 GMT]]></title><description><![CDATA[<p>Ungeachtet der eigentlich Frage: Don't!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023972</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:00:39 GMT]]></title><description><![CDATA[<p>Nein, das ist nicht möglich.</p>
<p>Und ich hake lieber nicht nach, was das werden soll, das ist schlecht für meinen Blutdruck...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023973</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:17:52 GMT]]></title><description><![CDATA[<p>Ich sage es dir trotzdem ;). Ich möchte wie man unschwer erkennen kann den Setter und Getter automatisch durch ein Macro erstellen können. Und da ich dieses Set &amp; Get nicht mag und</p>
<pre><code>int integer;
int integer() {return integer};
</code></pre>
<p>nicht funktioniert, soll der Anfangsbuchstabe der Funktionen groß geschrieben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023978</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:24:40 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> Es gibt Dinge, die will man gar nicht wissen. Jetzt kann ich mir nicht mehr einreden, dass dein erster Beitrag nur ein Beispiel gewesen sein könnte und du das gar nicht wirklich machen wolltest.</p>
<p>Und irgendwie sollte ich mich jetzt verpflichtet fühlen, etwas über Makros und Kapselung zu erzählen. Fühle ich mich aber nicht, denn ich bin müde, jemand anderes wird das sicher gleich tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023980</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:50:09 GMT]]></title><description><![CDATA[<p>Das Interessiert mich jetzt aber. Was haben denn Macros mit Kapselung zu tun? Ich dachte die ersetzen nur stupide den Text?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023988</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:50:09 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Sun, 20 Feb 2011 22:53:30 GMT]]></title><description><![CDATA[<p>Hör auf Decimad und SeppJ. <a href="http://www.c-plusplus.net/forum/281141" rel="nofollow">Warum?</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023989</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 20 Feb 2011 22:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Mon, 21 Feb 2011 08:56:12 GMT]]></title><description><![CDATA[<p>Student83 schrieb:</p>
<blockquote>
<p>Das Interessiert mich jetzt aber. Was haben denn Macros mit Kapselung zu tun? Ich dachte die ersetzen nur stupide den Text?</p>
</blockquote>
<p>Es grht mir darum, dass du gleich zwei Sünden auf einmal begehst. Automatische Codegenerierung ist ja sehr hübsch, aber du solltest dir klar sein, dass Makros jede Menge Nachteile haben.</p>
<p>Das andere ist, wenn jemand so viele triviale Getter/Setter schreibt, dass er ein Makro dafür will, dann stimmt etwas am Design nicht. Hier ein alternativer Vorschlag, der das gleiche erreicht:</p>
<pre><code class="language-cpp">// Vor allen Includes
#define class struct
#define private public
</code></pre>
<p>(Es gibt 2 Arten von Menschen: Solche die obiges als gute Lösung für ihre Probleme ansehen und solche die obiges als Hinweis auf die Schwächen ihres Design verstehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024040</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 21 Feb 2011 08:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Mon, 21 Feb 2011 09:28:26 GMT]]></title><description><![CDATA[<p>Und solche, die ihm trotzdem nicht die Lösung vorenthalten. Ob er sich für sein konkretes Problem zu einer Alternative überreden lässt, bleibt davon ungeachtet.</p>
<pre><code class="language-cpp">#define GETTER(X,Y)\
  X Y;\
  X Get_##Y() const

struct Foo {
  GETTER(int, integer);
};

int main()
{
  Foo foo;
  foo.Get_integer();
}
</code></pre>
<p>Man kann aber gleich verschiedene Probleme dabei erkennen. Der Zugriff auf die Variablen lässt sich nur schwer einschränken, weil der vorherige Zustand nicht Wiederherstellbar ist. Und man kann nur schwer erkennen, wie denn die konkrete Get-Methode nun eigentlich heißt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024056</guid><dc:creator><![CDATA[mixxa]]></dc:creator><pubDate>Mon, 21 Feb 2011 09:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Mon, 21 Feb 2011 11:14:38 GMT]]></title><description><![CDATA[<p>mixxa schrieb:</p>
<blockquote>
<p>Und man kann nur schwer erkennen, wie denn die konkrete Get-Methode nun eigentlich heißt.</p>
</blockquote>
<p>hehe^^ und intellisense funktioniert nicht <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>d.h. ---&gt;&gt;&gt; man muss doch wieder mehr selbst schreiben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024085</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 21 Feb 2011 11:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Mon, 21 Feb 2011 15:05:49 GMT]]></title><description><![CDATA[<p>@mixxa<br />
Genau dieses Get/Set will ich ja nicht, es sollte dann schon</p>
<pre><code>int main()
{
  Foo foo;
  foo.Integer();
}
</code></pre>
<p>heißen. Aber ihr habt mich überredet eingentlich brauche ich an der Stelle gar keine Macros und werde alles selber Tippen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024231</guid><dc:creator><![CDATA[Student83]]></dc:creator><pubDate>Mon, 21 Feb 2011 15:05:49 GMT</pubDate></item><item><title><![CDATA[Reply to Macro + UpperChar on Mon, 21 Feb 2011 15:19:19 GMT]]></title><description><![CDATA[<p>Ergänzend: Das Problem aus meiner Sicht mit den ganzen gettern/settern ist, dass man dann dazu neigt, die eigentliche Funktionalität außerhalb der Klasse anzusiedeln; die dient dann nämlich nur noch als quasi-public Datenhaltungsobjekt (aka struct). Ich kenne sowas eher von Java, kann aber nicht beurteilen, inwiefern das da mehr Sinn macht.</p>
<p>Im Allgemeinen sagt man ja, jede Klasse hat genau eine Aufgabe. Und die ist es <em>nicht</em>, nur Daten zu halten. Sie sollte möglichst wenige Interna offenlegen und alle Veränderungen an sich selbst abstrakter kapseln als mit einem setXXX. Containerklassen wie std::vector o.Ä. seien hier eine Ausnahme.</p>
<p>Als Anfänger geht man oft bottom-up dran - man überlegt, was die Klasse für Attribute hat und natürlich muss man alle abfragen und setzen können (wegen &quot;was ist, wenn man aber blubb machen will&quot;). Oft eignet sich imho ein top-down Ansatz aber besser, man überlegt also, wie man die Klasse verwenden würde. Eventuell verwendet man die noch-nicht-existente-oder-designte Klasse in Pseudocode, um ein Gefühl an die Anforderungen zu entwickeln. Und meiner Erfahrung nach kommt dann sowas Unterschiedliches dabei raus:</p>
<p>Szenario: Uhr-Klasse, z.B. für ein Gadget wie <a href="http://1.bp.blogspot.com/__JEHBSKCKgA/SXlqg78C-2I/AAAAAAAABFo/L5CPJQyGCsw/s400/Clocktopia_2_0_by_rodfdez.jpg" rel="nofollow">hier</a>.<br />
Was ich bei Anfängern oft sehe:</p>
<pre><code class="language-cpp">class clock {
    public:
        clock();

        void draw( ... );

        int getHours() const;
        void setHours( int Hours );
        int getMinutes() const;
        void setMinutes( int Minutes );
        int getSeconds() const;
        void setSeconds( int Seconds );
};
</code></pre>
<p>Eigentlich aber braucht man nur sowas:</p>
<pre><code class="language-cpp">class clock {
    public:
        clock( int Hours, int Minutes, int Seconds );
        void tick(); // Erhöht Zeit um eine Sekunde
        void draw( ... );
};
</code></pre>
<p>Oder vielleicht auch nur:</p>
<pre><code class="language-cpp">class autoclock {
    public:
        autoclock();
        void draw( ... );  //Zeichnet einfach aktuelle Systemzeit
};
</code></pre>
<p>Das Schlechte an der allerersten Variante ist, dass das Fenster, das die Uhr beinhaltet, in seiner Funktion zum Zeichen der Uhr erst die Uhrzeit setzen muss. Klar, sind nur ein oder zwei Zeilen aber die Logik gehört da nicht hin (in diesem Anwendungsfall). Es ist zwar maximal flexibel, aber lagert die Verantwortung nur aus, weg ist sie ja nicht; nur sind Klassen eben dazu da, uns Arbeit abzunehmen.</p>
<p>Abschließend: Man neigt leider (ich ja auch) oft dazu, alles so generell und flexibel wie möglich entwerfen zu wollen. So, dass auch der letzte Hansel es für ein komplett anderes Projekt verwenden könnte und ich genau diese Klasse selbst in 10 Jahren auf einem anderen Rechnertyp mit anderem OS wiederverwenden kann. Das hat aber nun mal seinen Preis, besonders im Hinblick auf die Verständlichkeit. Oft reicht es, für den <em>aktuellen</em> Stand zu designen und dabei <em>ein wenig</em> mögliche zukünftige Änderungen und Anforderungen einzuplanen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024243</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Mon, 21 Feb 2011 15:19:19 GMT</pubDate></item></channel></rss>