<?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[Decorator-Pattern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche grade, ein kleines Beispiel für das Decorator-Pattern zu erstellen, jedoch habe ich bei der Vererbung Probleme.</p>
<p>Hier mal mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Spielfigur {

  public:
    virtual void properties() {
      cout &lt;&lt; &quot;Diese Figur hat folgende Eigenschaften:\n&quot;;
    }
    Spielfigur() {}

};

class Schachfigur : public Spielfigur {

  public:

    virtual void properties() {
      cout &lt;&lt; &quot;Diese Schachfigur hat folgende Eigenschaften:\n&quot;;
    }

};

class Decorator : public Spielfigur {

  public:
    Decorator(Spielfigur&amp; s) : myFigur(s) {}

  protected:
    Spielfigur myFigur;

};

class DameDekorierer : public Decorator {

  public:
    DameDekorierer(Spielfigur&amp; s) : Decorator(s) { }

    virtual void properties() {
      myFigur.properties();
      cout &lt;&lt; &quot;Sie ist eine Dame\n&quot;;
    }
};

int main() {

Spielfigur figur;
Spielfigur dame=DameDekorierer(figur);

dame.properties();

}
</code></pre>
<p>Bei Ausfuehren des Programms wird nur die Methode der Klasse Spielfigur ausgegeben, nicht die Methode von der Klasse DameDekorierer. Wie kann ich dies ändern, ohne in der main-Methode den Aufruf &quot;DameDekorierer dame=DameDekorierer(figur)&quot; zu nutzen? Ist dies überhaupt moeglich?</p>
<p>Achja, ich weiß, dass das Dekorierer-Pattern für Spielfiguren nicht die sinnvollste Möglichkeit ist, sondern vllt eher das Fabrikmuster. Es dient lediglich nur dazu, das Pattern zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283350/decorator-pattern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 16:42:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283350.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Mar 2011 08:53:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 08:57:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche grade, ein kleines Beispiel für das Decorator-Pattern zu erstellen, jedoch habe ich bei der Vererbung Probleme.</p>
<p>Hier mal mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Spielfigur {

  public:
    virtual void properties() {
      cout &lt;&lt; &quot;Diese Figur hat folgende Eigenschaften:\n&quot;;
    }
    Spielfigur() {}

};

class Schachfigur : public Spielfigur {

  public:

    virtual void properties() {
      cout &lt;&lt; &quot;Diese Schachfigur hat folgende Eigenschaften:\n&quot;;
    }

};

class Decorator : public Spielfigur {

  public:
    Decorator(Spielfigur&amp; s) : myFigur(s) {}

  protected:
    Spielfigur myFigur;

};

class DameDekorierer : public Decorator {

  public:
    DameDekorierer(Spielfigur&amp; s) : Decorator(s) { }

    virtual void properties() {
      myFigur.properties();
      cout &lt;&lt; &quot;Sie ist eine Dame\n&quot;;
    }
};

int main() {

Spielfigur figur;
Spielfigur dame=DameDekorierer(figur);

dame.properties();

}
</code></pre>
<p>Bei Ausfuehren des Programms wird nur die Methode der Klasse Spielfigur ausgegeben, nicht die Methode von der Klasse DameDekorierer. Wie kann ich dies ändern, ohne in der main-Methode den Aufruf &quot;DameDekorierer dame=DameDekorierer(figur)&quot; zu nutzen? Ist dies überhaupt moeglich?</p>
<p>Achja, ich weiß, dass das Dekorierer-Pattern für Spielfiguren nicht die sinnvollste Möglichkeit ist, sondern vllt eher das Fabrikmuster. Es dient lediglich nur dazu, das Pattern zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032057</guid><dc:creator><![CDATA[Fabulus]]></dc:creator><pubDate>Thu, 10 Mar 2011 08:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 08:57:58 GMT]]></title><description><![CDATA[<p>Ein typischer Fall von Slicing.</p>
<p>Probiers mal so:</p>
<pre><code class="language-cpp">Spielfigur &amp; dame = DameDekorierer(figur); //&amp;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032059</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 08:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 09:04:16 GMT]]></title><description><![CDATA[<p>Mit dem &amp; kommt folgender Fehler:</p>
<pre><code>Decorator.cpp:51: error: invalid initialization of non-const reference of type 'Spielfigur&amp;' from a temporary of type 'DameDekorierer'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032063</guid><dc:creator><![CDATA[Fabulus]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 09:23:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">DameDekorierer deko(figur);
Spielfigur &amp; dame = deko;
</code></pre>
<p>Oder Du machnst eine <code>const</code> -Referenz davon, aber dann müssen die aufgerufenen Methoden auch <code>const</code> sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032077</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:23:34 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 09:30:57 GMT]]></title><description><![CDATA[<p>Zur ersten Sache:<br />
Dann müsste ich ja, wenn ein bestimmtes Objekt noch weiter dekoriert werden sollte, immer neue Objekte dieser Dekoration erstellen, oder?</p>
<p>Also wenn zb die Dame nicht nur eine Dame ist, sondern auch eine TolleDame, die dann weitere Eigenschaften hat.<br />
Dann bräuchte ich doch zb ein Objekt &quot;toll&quot; des Typs TollerDekorierer, ein Objekt &quot;dame&quot; des Typs &quot;DameDekorierer&quot; und das Objekt figur.</p>
<p>Ist das richtig?</p>
<p>Kurz implementiert:</p>
<pre><code class="language-cpp">class TollerDekorierer : public Decorator {

  public:
    TollerDekorierer(Spielfigur&amp; s) : Decorator(s) {}

  virtual void properties() const {
    myFigur.properties();
    cout &lt;&lt; &quot;Sie ist toll.\n&quot;;
  }
};

int main() {

Spielfigur figur;
DameDekorierer deko(figur);
TollerDekorierer toll(deko);
const Spielfigur&amp; dame=toll;

dame.properties();

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032084</guid><dc:creator><![CDATA[Fabulus]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 09:30:15 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Decorator selber muss auch eine Referenz enthalten! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032085</guid><dc:creator><![CDATA[DrPhlox]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Decorator-Pattern on Thu, 10 Mar 2011 09:38:34 GMT]]></title><description><![CDATA[<p>Ah, das wurde schon geändert, das Attribut im Decorator ist Spielfigur&amp; myFigur.</p>
<p>Damit ich diese Objekte nicht vorher erstellen muss, sondern direkt</p>
<pre><code>Spielfigur&amp; tolleDame=TollerDekorierer(DameDekorierer(figur));
</code></pre>
<p>schrieben kann, muss noch wo ein const hin, aber wo genau? Alle properties()-Methoden sind jetzt</p>
<pre><code>virtual void properties() const
</code></pre>
<p>und die Konstruktoren der Dekorierer haben als Attribut &quot;const Spielfigur&amp; s&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032087</guid><dc:creator><![CDATA[Fabulus]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:38:34 GMT</pubDate></item></channel></rss>