<?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[Design Pattern - Strategy]]></title><description><![CDATA[<p>Was mache ich falsch bei dem Strategy design Pattern?<br />
ich bekomme beim erstellen eines Objektes der Klasse diese meldung:</p>
<pre><code>error C2259: 'Strategy': Instanz von abstrakter Klasse kann nicht erstellt werden
1&gt;          aufgrund folgender Member:
1&gt;          &quot;void Strategy::strat(void)&quot;: ist abstrakt
</code></pre>
<pre><code>class Strategy
{
	public:

		virtual void	strat() = 0;

};
</code></pre>
<pre><code>class a : public Strategy
{
	public:
		void strat()
		{
			cout &lt;&lt; &quot;aaaa&quot;;
		};
};
</code></pre>
<pre><code>int main(void)
{
	Strategy choose = a();

	choose.strat();
	system(&quot;Pause&quot;);
	return 1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/318784/design-pattern-strategy</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 22:02:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318784.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Jul 2013 10:28:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 10:28:52 GMT]]></title><description><![CDATA[<p>Was mache ich falsch bei dem Strategy design Pattern?<br />
ich bekomme beim erstellen eines Objektes der Klasse diese meldung:</p>
<pre><code>error C2259: 'Strategy': Instanz von abstrakter Klasse kann nicht erstellt werden
1&gt;          aufgrund folgender Member:
1&gt;          &quot;void Strategy::strat(void)&quot;: ist abstrakt
</code></pre>
<pre><code>class Strategy
{
	public:

		virtual void	strat() = 0;

};
</code></pre>
<pre><code>class a : public Strategy
{
	public:
		void strat()
		{
			cout &lt;&lt; &quot;aaaa&quot;;
		};
};
</code></pre>
<pre><code>int main(void)
{
	Strategy choose = a();

	choose.strat();
	system(&quot;Pause&quot;);
	return 1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2341433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341433</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 26 Jul 2013 10:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 10:34:35 GMT]]></title><description><![CDATA[<p>du instanziierst eine abstrakte klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341436</guid><dc:creator><![CDATA[flabahz]]></dc:creator><pubDate>Fri, 26 Jul 2013 10:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 10:37:25 GMT]]></title><description><![CDATA[<p>und was tue ich dagegen?<br />
Ich möchte später ja einen Vector mit Strategien füllen und mir dann die richtige aussuchen. Ich brauche eine gemeinsame Schnitstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341439</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Fri, 26 Jul 2013 10:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 10:54:54 GMT]]></title><description><![CDATA[<p>Dann nimmst du Zeiger, bzw. Smarte Zeiger:</p>
<pre><code>int main(void)
{
    //Strategy * choose = new a;
    std::unique_ptr&lt;Strategy&gt; choose(new a());
    // std::shared_ptr&lt;Strategy&gt; choose(new a()); // wenn du mehrere Zeiger auf ein Objekt brauchst

    choose-&gt;strat();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2341445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341445</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 26 Jul 2013 10:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 11:28:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Was mache ich falsch bei dem Strategy design Pattern?</p>
</blockquote>
<p>Eigentlich alles!</p>
<p>Zunächst solltest du dir angewöhnen den Destruktor bei Klassen mit virtuellen Funktionen als virtual zu deklarieren</p>
<pre><code>class IStrategie {
public:
 virtual ~IStrategie() { } // &lt;-- Virtueller Destruktor
 virtual void doSth() = 0;
};
</code></pre>
<p>2. Geht es bei dem Strategie-Muster darum, dass eine Klasse seine Eigenschaften zur Laufzeit ändert.<br />
Wenn du das unbedingt über new / delete machen willst, solltest du dir angewöhnen alle Speicherblöcke, die du mit new angefordert hast wieder freizugeben.</p>
<pre><code>class MyClass {
public:

  MyClass() 
    :m_s(new Strategie1()) { }   // &lt;-- Anfangsstrategie

  ~MyClass() {
    delete m_s;     // &lt;-- delete
  }

  void set(IStrategie *st) {
    delete m_s;    // &lt;-- delete
    m_s = st;
  }

  void doSth() {
    assert(m_s != nullptr);
    m_s-&gt;doSth();
  }

private:
  IStrategie *m_s;

};
</code></pre>
<p>Nun kann deine Klasse zur Laufzeit seine Eigenschaften ändern.</p>
<pre><code>MyClass c;
c.doSth();
c.set(new Strategie2());
c.doSth();
// ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2341459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341459</guid><dc:creator><![CDATA[Kohle und Stahl]]></dc:creator><pubDate>Fri, 26 Jul 2013 11:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Fri, 26 Jul 2013 13:04:59 GMT]]></title><description><![CDATA[<p>Letzten beiden Antworten kombiniert = fein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341483</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 26 Jul 2013 13:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 05:44:47 GMT]]></title><description><![CDATA[<p>Danke euch!<br />
Ich hab es jetzt wie hier übernommen und es Funktioniert wie gewünscht.<br />
Aber Funktion alleine war nicht der Plan, ich wollte eine schönere komfortable lösung für meine Konsole finden, wofür ich schon eine funktionale Lösung habe.<br />
Daher wärs schön wenn ihr mir noch ein,zwei tipps geben könntet.</p>
<p>Kohle und Stahl schrieb:</p>
<blockquote>
<p>Wenn du das unbedingt über new / delete machen willst,...</p>
</blockquote>
<p>Wie sähe denn eine bessere Lösung aus?</p>
<p>Gruß,<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341864</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Mon, 29 Jul 2013 05:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 07:12:08 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Aber Funktion alleine war nicht der Plan, ich wollte eine schönere komfortable lösung für meine Konsole finden, wofür ich schon eine funktionale Lösung habe.</p>
</blockquote>
<p>Hä? Was wofür?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341873</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 29 Jul 2013 07:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 07:20:17 GMT]]></title><description><![CDATA[<p>Ich nutze das Strategy pattern jetzt dafür, um einen Vector aus Kommandos zu machen die alle eine unterschiedliche version von method() haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341876</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Mon, 29 Jul 2013 07:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 07:50:42 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Kohle und Stahl schrieb:</p>
<blockquote>
<p>Wenn du das unbedingt über new / delete machen willst,...</p>
</blockquote>
<p>Wie sähe denn eine bessere Lösung aus?</p>
</blockquote>
<p>Smartpointer</p>
<p>unique_ptr z.B.</p>
<p><a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" rel="nofollow">http://en.cppreference.com/w/cpp/memory/unique_ptr</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341885</guid><dc:creator><![CDATA[Kohle und Stahl]]></dc:creator><pubDate>Mon, 29 Jul 2013 07:50:42 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 08:03:12 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Ich nutze das Strategy pattern jetzt dafür, um einen Vector aus Kommandos zu machen die alle eine unterschiedliche version von method() haben.</p>
</blockquote>
<p>ja und? soweit waren wir schon...<br />
Und dafür ist das Strategy-Pattern auch da. Aber dafür ist auch Verberung mit Polymorphie da...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341892</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 29 Jul 2013 08:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 09:43:22 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>cl90 schrieb:</p>
<blockquote>
<p>Ich nutze das Strategy pattern jetzt dafür, um einen Vector aus Kommandos zu machen die alle eine unterschiedliche version von method() haben.</p>
</blockquote>
<p>ja und? soweit waren wir schon...<br />
Und dafür ist das Strategy-Pattern auch da. Aber dafür ist auch Verberung mit Polymorphie da...</p>
</blockquote>
<p>Und was ist dir jetzt unklar?</p>
<p>@Kohle und Stahl<br />
Danke! versteh ich das richtig das unique_ptr selbständig meine Klassen wieder löscht, und verhindert das ich ungewollt mehrere Instanzen von einem Objekt erstelle?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341924</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Mon, 29 Jul 2013 09:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 09:52:07 GMT]]></title><description><![CDATA[<p>cl90 schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>cl90 schrieb:</p>
<blockquote>
<p>Ich nutze das Strategy pattern jetzt dafür, um einen Vector aus Kommandos zu machen die alle eine unterschiedliche version von method() haben.</p>
</blockquote>
<p>ja und? soweit waren wir schon...<br />
Und dafür ist das Strategy-Pattern auch da. Aber dafür ist auch Verberung mit Polymorphie da...</p>
</blockquote>
<p>Und was ist dir jetzt unklar?</p>
</blockquote>
<p>Was du mit Console und Funktion meinst...</p>
<p>cl90 schrieb:</p>
<blockquote>
<p>@Kohle und Stahl<br />
Danke! versteh ich das richtig das unique_ptr selbständig meine Klassen wieder löscht, und verhindert das ich ungewollt mehrere Instanzen von einem Objekt erstelle?</p>
</blockquote>
<p>Nein, er löscht die dynamisch erzeugten Instanzen automatisch, das ist richtig. Aber er verhindert nicht, dass du mehrere Instanzen einer Klasse erstellst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341928</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 29 Jul 2013 09:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern - Strategy on Mon, 29 Jul 2013 10:22:52 GMT]]></title><description><![CDATA[<p>Mit Console meine ich etwas wie CMD bei windows. Wobei es in meiner Consolen Klasse nicht um darstellung sondern nur um verwaltung und ausführen meiner Befehle geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341934</guid><dc:creator><![CDATA[cl90]]></dc:creator><pubDate>Mon, 29 Jul 2013 10:22:52 GMT</pubDate></item></channel></rss>