<?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[enum der richtige Weg?]]></title><description><![CDATA[<p>Eine Klassenvariable soll verschiedene zustände haben können: viel, wenig, sehr viel, sehr wenig usw.</p>
<p>Wäre der Ansatz richtig sich dafür eine Aufzählung zu machen so das ich dann sage</p>
<p>Menge m_Menge;</p>
<p>m_Menge = viel;</p>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119751/enum-der-richtige-weg</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 03:21:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119751.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Sep 2005 09:33:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 09:33:55 GMT]]></title><description><![CDATA[<p>Eine Klassenvariable soll verschiedene zustände haben können: viel, wenig, sehr viel, sehr wenig usw.</p>
<p>Wäre der Ansatz richtig sich dafür eine Aufzählung zu machen so das ich dann sage</p>
<p>Menge m_Menge;</p>
<p>m_Menge = viel;</p>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865227</guid><dc:creator><![CDATA[*enumerier*]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 09:40:06 GMT]]></title><description><![CDATA[<p>ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865239</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 09:44:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
das ist prinzipiell nicht verkehrt. Es kommt aber darauf an, wie und ob die verschiedenen Zustände das Verhalten der Klasse (bzw. deren Objekte) beeinflussen. Wenn du z.B. viele Methoden hast die etwa so aussehen:</p>
<pre><code class="language-cpp">void Class::method() {
   if (m_Menge == seh_viel) {
      doThis();
   }
   else if (m_Menge == viel) {
      doThat();
   }
   ...
}
</code></pre>
<p>dann könnte ein polymorphes Objekt (siehe State-Pattern) der bessere Ansatz sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865242</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 09:45:30 GMT]]></title><description><![CDATA[<p>definitiv<br />
hättest halt dann so was wie:</p>
<pre><code class="language-cpp">enum Menge={wenig=0x0001,viel=0x0002,sehr_viel=0x0004};
</code></pre>
<p>kkthxbye</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865243</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 09:55:43 GMT]]></title><description><![CDATA[<p>ok danke jungs!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865249</guid><dc:creator><![CDATA[*enumerier*]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 10:02:47 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Hallo,<br />
das ist prinzipiell nicht verkehrt. Es kommt aber darauf an, wie und ob die verschiedenen Zustände das Verhalten der Klasse (bzw. deren Objekte) beeinflussen. Wenn du z.B. viele Methoden hast die etwa so aussehen:</p>
<pre><code class="language-cpp">void Class::method() {
   if (m_Menge == seh_viel) {
      doThis();
   }
   else if (m_Menge == viel) {
      doThat();
   }
   ...
}
</code></pre>
<p>dann könnte ein polymorphes Objekt (siehe State-Pattern) der bessere Ansatz sein.</p>
</blockquote>
<p>Ich hab mich jetzt mal umgehört, eigentlich benutze ich das ganze dann so wie in deinem Beispiel. Allerdings verstehe ich nicht, wie ich ein state-pattern darauf anwenden könnte? Hast du evtl. ein kleines beispiel dafür?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865261</guid><dc:creator><![CDATA[*enumerier*]]></dc:creator><pubDate>Mon, 05 Sep 2005 10:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to enum der richtige Weg? on Mon, 05 Sep 2005 11:54:27 GMT]]></title><description><![CDATA[<p><em>enumerier</em> schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Hallo,<br />
das ist prinzipiell nicht verkehrt. Es kommt aber darauf an, wie und ob die verschiedenen Zustände das Verhalten der Klasse (bzw. deren Objekte) beeinflussen. Wenn du z.B. viele Methoden hast die etwa so aussehen:</p>
<pre><code class="language-cpp">void Class::method() {
   if (m_Menge == seh_viel) {
      doThis();
   }
   else if (m_Menge == viel) {
      doThat();
   }
   ...
}
</code></pre>
<p>dann könnte ein polymorphes Objekt (siehe State-Pattern) der bessere Ansatz sein.</p>
</blockquote>
<p>Ich hab mich jetzt mal umgehört, eigentlich benutze ich das ganze dann so wie in deinem Beispiel. Allerdings verstehe ich nicht, wie ich ein state-pattern darauf anwenden könnte? Hast du evtl. ein kleines beispiel dafür?</p>
</blockquote>
<p>Da ich deine konkrete Situation nicht kenne, kann ich dir nur ein sehr abstraktes Beispiel geben. Erstmal macht das Ganze wie gesagt nur sinn, wenn a) der Zustand von Menge auf der einen Seite das Verhalten der Klasse ändert und b) der Zustand von Menge variabel ist (also sich dynamisch ändern kann).</p>
<p>Das Ziel ist es, den Code der abhängig vom konkreten Aufzählungswert ausgeführt wird in virtuelle Methoden zu abstrahieren. Aus:</p>
<pre><code class="language-cpp">void Class::method() {
   if (m_Menge == seh_viel) {
      doThis();
   }
   else if (m_Menge == viel) {
      doThat();
   }
   ...
}
</code></pre>
<p>wir dann z.B.</p>
<pre><code class="language-cpp">void Class::method() {
   m_Menge.doIt();
}
</code></pre>
<p>Die Vorgehensweise ist relativ einfach.<br />
Aus der Aufzählung machst du eine abstrakte Klasse. Von dieser leitest du für jeden Wert der Aufzählung eine konkreten Klassen ab. Das Interface der abstrakten Klasse ergibt sich aus der Abstraktion des Codes der abhängig vom konkreten Aufzählungswert ausgeführt wird (im oberen Beispiel ist das doThis und doThat. Das abstrahieren wir z.B. in eine virtuelle Methode doIt).</p>
<pre><code class="language-cpp">class Menge {
public:
   virtual ~Menge();
   virtual void doIt() {}
};

class SehrViel : public Menge {
public:
   void doIt() {
       // Implementation für SehrViel
   }
};

class Viel : public Menge {
public:
   void doIt() {
       // Implementation für Viel
   }
};

...
</code></pre>
<p>In deiner Kontext-Klasse machst du m_Menge dann zu einem Attribut vom Typ Zeiger-auf-Menge. In den Methoden wo du früher den Wert der Aufzählung geändert hast, ersetzt du jetzt das Objekt auf das dein m_Menge-Zeiger zeigt (dazu kannst du jedes mal ein neues Objekt instanziieren (und das alte löschen) oder aber als Optimierung ein Singleton-Objekt für jeden Zustand verwenden).</p>
<pre><code class="language-cpp">class Class {
public:
   void f() {
       m_Menge-&gt;doIt();
   }
private:
   Menge* m_Menge;  // State bzw. Strategy-Objekt
};
</code></pre>
<p>Ob das Ganze jetzt Richtung State oder Strategy wandert ist abhängig davon, wo die Transitionslogik untergebracht ist und wer für den Zustandsübergang zuständig sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865345</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 05 Sep 2005 11:54:27 GMT</pubDate></item></channel></rss>