<?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[Virtual Constructor]]></title><description><![CDATA[<p>Hallo, ich schreibe gerade ein kleines Schachspiel, um mein Objektorientiertes Programmieren zu üben ^^</p>
<p>Nun bin ich auf ein Problem gestossen, ich möchte eine abstrakte piece Klasse erstellen und diese dann an die einzelnen Schachfiguren vererben.</p>
<p>Doch, wie kann ich einen virtuellen Konstruktor erstellen? Denn beim erstellen dieser Figuren werden die gleichen Argumente erwartet.</p>
<p>Dankeschön,</p>
<p>samyboy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256906/virtual-constructor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 23:16:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256906.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Dec 2009 14:59:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 14:59:34 GMT]]></title><description><![CDATA[<p>Hallo, ich schreibe gerade ein kleines Schachspiel, um mein Objektorientiertes Programmieren zu üben ^^</p>
<p>Nun bin ich auf ein Problem gestossen, ich möchte eine abstrakte piece Klasse erstellen und diese dann an die einzelnen Schachfiguren vererben.</p>
<p>Doch, wie kann ich einen virtuellen Konstruktor erstellen? Denn beim erstellen dieser Figuren werden die gleichen Argumente erwartet.</p>
<p>Dankeschön,</p>
<p>samyboy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824993</guid><dc:creator><![CDATA[Samyboy]]></dc:creator><pubDate>Sat, 19 Dec 2009 14:59:34 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 15:02:13 GMT]]></title><description><![CDATA[<p>Ein virtueller Konstruktor geht nicht und macht auch wenig Sinn. Beim Erstellen der Instanz musst du den tatsächlichen Typen kennen.</p>
<p>Also schreib in der Basisklasse einen Konstruktor, der seinen Teil initialisiert, und in den abgeleiteten Klassen definierst du neue Konstruktoren, welche den Basisklassenkonstruktor aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824994</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 15:05:16 GMT]]></title><description><![CDATA[<p>Dankeschön Nexus.</p>
<p>Hab grade gemerkt es ist sowieso eine blöde Idee eine abstrakte piece Klasse für die einzelnen Figuren zu erstellen - wozu auch?</p>
<p>Es stimmt zwar:</p>
<p>rook is a piece</p>
<p>Bringt aber in meinem Fall nix, oder würdest Du, wenn Du ein Schachspiel schreibts eine solche abstrakte Klasse erstellen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824997</guid><dc:creator><![CDATA[Samyboy]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 15:06:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef bool color;

class piece
{
public:
    piece(color c)
    : clr_(c)
    {}
private:
    color clr_;
};

class king : public piece
{
public:
    king(color c)
    : piece(c), zeugs_(0)
    {}
private:
    kingzeugs zeugs_;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1824999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824999</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 15:18:04 GMT]]></title><description><![CDATA[<p>Samyboy schrieb:</p>
<blockquote>
<p>Hab grade gemerkt es ist sowieso eine blöde Idee eine abstrakte piece Klasse für die einzelnen Figuren zu erstellen - wozu auch?</p>
</blockquote>
<p>Das ist nicht unbedingt eine blöde Idee. Du kannst so die unterschiedlichen Figuren gemeinsam ansprechen. Wenn die Basisklasse zudem polymorph ist, kannst du über sie Aktionen ausführen, die erst in den abgeleiteten Klassen definiert werden.</p>
<p>Ans Beispiel von brotbernd angelehnt:</p>
<pre><code class="language-cpp">class Piece
{
    public:
        // Konstruktor, um Basisklasse zu initialisieren
        Piece(Color Col, Position Pos);

        // Virtueller Destruktor nötig bei Polymorphie
        virtual ~Piece();

        // Funktion wird in abgeleiteten Klassen implementiert
        virtual bool IsMovementValid(Position Dest) = 0;

        // Normale, nicht-virtuelle Funktion
        Color GetColor() const;

    private:
        Color MyColor;
        Position MyPosition;
};

class King : public Piece
{
    public:
        // ruft Piece::Piece()-Konstruktor auf
        King(Color Col, Position Pos);

        // Prüft Zug spezifisch für König
        virtual bool IsMovementValid(Position Dest);
};

int main()
{
    King k1;

    // King als Piece ansprechen (Abstraktion, z.B. in
    // Container von mehreren Figuren)
    Piece* p = &amp;k1;

    // Prüft gültigen Zug für König, ohne dass es sich
    // bei p um eine King-Variable handelt: Dynamische Polymorphie.
    p-&gt;IsMovementValid(Position(&quot;B3&quot;));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1825004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825004</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:18:04 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Constructor on Sat, 19 Dec 2009 15:30:25 GMT]]></title><description><![CDATA[<p>Öffentliche Vererbung sollte man nur nutzen wenn man das ganze polymorph nutzen möchte, so wie es Nexus gezeigt hat. Ob das bei einem Schachspiel unbedingt nötig ist müsste man noch mal etwas ausführlicher überdenken. Ein Schachspiel beginnt ja eigentlich immer mit der selben Konstellation an Objekten.<br />
Die gezeigte IsMovementValid Geschichte könnte man z.B. auch mit dem Strategy Pattern lösen. Jede Figur würde mit einem unterschiedlichen MovementSolver initialisiert, der für jeden Zug berechnet wo es hingehen kann.</p>
<p>Das sind aber nur Anregungen, keine Empfehlungen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825007</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:30:25 GMT</pubDate></item></channel></rss>