<?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[Objekte nachträglich in abgeleitete Objekte umwandeln]]></title><description><![CDATA[<p>Hallo,</p>
<p>für mein Spiel hab ich eine Klasse &quot;einheit&quot; und davon abgeleitet Klassen wie &quot;soldat&quot;, &quot;reiter&quot; oder &quot;bogenschütze&quot;. Ich würde gern wissen, wie ich es anstellen kann, dass ich zu Programmbeginn z.b. 100 &quot;einheit&quot; objekte anlege und sie später in verschiedene Unterklassen umwandle.<br />
Geht so etwas?<br />
Oder wie könnte ich sonst während das Programm läuft verschiedene von der Benutzereingabe abhängige Objekte erstellen?</p>
<p>Danke schonmal!<br />
Gruß Knobbers.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291905/objekte-nachträglich-in-abgeleitete-objekte-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:03:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291905.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Aug 2011 17:52:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 17:52:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für mein Spiel hab ich eine Klasse &quot;einheit&quot; und davon abgeleitet Klassen wie &quot;soldat&quot;, &quot;reiter&quot; oder &quot;bogenschütze&quot;. Ich würde gern wissen, wie ich es anstellen kann, dass ich zu Programmbeginn z.b. 100 &quot;einheit&quot; objekte anlege und sie später in verschiedene Unterklassen umwandle.<br />
Geht so etwas?<br />
Oder wie könnte ich sonst während das Programm läuft verschiedene von der Benutzereingabe abhängige Objekte erstellen?</p>
<p>Danke schonmal!<br />
Gruß Knobbers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112161</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Mon, 29 Aug 2011 17:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 17:55:30 GMT]]></title><description><![CDATA[<p>Vielleicht hilft dir das Stichwort &quot;Factory-Pattern&quot; weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112162</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 29 Aug 2011 17:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 17:57:32 GMT]]></title><description><![CDATA[<p>Du erstellst die Objekte während der laufzeit mit new und Speicherst sie z.B. in einem Array von einheit-pointern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112165</guid><dc:creator><![CDATA[Jonas OSDever]]></dc:creator><pubDate>Mon, 29 Aug 2011 17:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 18:24:55 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Vielleicht hilft dir das Stichwort &quot;Factory-Pattern&quot; weiter.</p>
</blockquote>
<p>Übertreibst du da nicht ein bisschen? Der Threadersteller ist offensichtlich totaler Anfänger.</p>
<p>@Threadersteller: Da gibt es viele Möglichkeiten. Die Grundfrage ist erst einmal, ob du die Objekte hinterher über ein gemeinsames Interface ansprechen kannst/möchtest oder nicht. Mal angenommen nein:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class Bogenschuetze
{
  unsigned nummer;
public:
  explicit Bogenschuetze(unsigned nummer): nummer(nummer) {}
  void schiess()
  {
    cout &lt;&lt; &quot;Bogenschütze Nummer &quot; &lt;&lt; nummer &lt;&lt; &quot; schießt.\n&quot;;
  }
};

class Schwertkaempfer
{
  unsigned nummer;
public:
  explicit Schwertkaempfer(unsigned nummer): nummer(nummer) {}
  void schlag()
  {
    cout &lt;&lt; &quot;Schwertkämpfer Nummer &quot; &lt;&lt; nummer &lt;&lt; &quot; schlägt.\n&quot;;
  }
};

int main()
{
  vector&lt;Bogenschuetze&gt; schuetzen;
  vector&lt;Schwertkaempfer&gt; kaempfer;
  cout &lt;&lt; &quot;b: neuer Bogenschütze\ns: neuer Schwertkämpfer\nk: Kämpfen und Ende\n&quot;;
  char input;
  while ((cin &gt;&gt; input) and input != 'k')
    {
      if (input=='b')
        schuetzen.push_back(Bogenschuetze(schuetzen.size()+1));
      else if (input=='s')
        kaempfer.push_back(Schwertkaempfer(kaempfer.size()+1));
    }
  for(unsigned i = 0; i &lt; schuetzen.size(); ++i)
    schuetzen[i].schiess();
  for(unsigned i = 0; i &lt; kaempfer.size(); ++i)
    kaempfer[i].schlag();
}
</code></pre>
<p>Und angenommen du brauchst ein gemeinsames Interface:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class Einheit
{
  unsigned nummer;
public:
  explicit Einheit(unsigned nummer): nummer(nummer) {}
  virtual void kaempf()=0;
  virtual ~Einheit() {}
  unsigned get_nummer() {return nummer;}
};

class Bogenschuetze: public Einheit
{
public:
  explicit Bogenschuetze(unsigned nummer): Einheit(nummer) {}
  virtual void kaempf()
  {
    cout &lt;&lt; &quot;Bogenschütze Nummer &quot; &lt;&lt; get_nummer() &lt;&lt; &quot; schießt.\n&quot;;
  }
};

class Schwertkaempfer: public Einheit
{
public:
  explicit Schwertkaempfer(unsigned nummer): Einheit(nummer) {}
  virtual void kaempf()
  {
    cout &lt;&lt; &quot;Schwertkämpfer Nummer &quot; &lt;&lt; get_nummer() &lt;&lt; &quot; schlägt.\n&quot;;
  }
};

int main()
{
  unsigned num_schuetzen = 0, num_kaempfer = 0;
  vector&lt;Einheit*&gt; einheiten;
  cout &lt;&lt; &quot;b: neuer Bogenschütze\ns: neuer Schwertkämpfer\nk: Kämpfen und Ende\n&quot;;
  char input;
  while ((cin &gt;&gt; input) and input != 'k')
    {
      if (input=='b')
        {
          einheiten.push_back(new Bogenschuetze(++num_schuetzen));
        }
      else if (input=='s')
        {
          einheiten.push_back(new Schwertkaempfer(++num_kaempfer));
        }
    }
  for(unsigned i = 0; i &lt; einheiten.size(); ++i)
    einheiten[i]-&gt;kaempf();

  for(unsigned i = 0; i &lt; einheiten.size(); ++i)
    delete einheiten[i];
}
</code></pre>
<p>Insbesondere der zweite Vorschlag hat noch reichlich Verbesserungspotential was die Sicherheit angeht. Man sollte lieber einen Pointercontainer nehmen (der löscht die Elemente automatisch) oder die Elemente so wie in Fall 1 in einem anderen Container speichern und den Zugriff über Zeiger auf diese Elemente organisieren (aber aufpassen, dass die Adressen sich nicht ändern, zum Beispiel bei Vectorreallokationen!).</p>
<p>Oder wenn du die durchgestylte Patentlösung benutzen möchtest, dann Google mal nach Pis Stichwort. Aber dafür solltest du zumindest einigermaßen den Durchblick in den Grundlagen von C++ haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112168</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 29 Aug 2011 18:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 19:05:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Objekte nachträglich in abgeleitete Objekte umwandeln</p>
</blockquote>
<p>Das geht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112179</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 29 Aug 2011 19:05:06 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 22:11:57 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Objekte nachträglich in abgeleitete Objekte umwandeln</p>
</blockquote>
<p>Das geht nicht.</p>
</blockquote>
<p>Ist doch egal, das will er doch eigentlich auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112249</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Aug 2011 22:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Mon, 29 Aug 2011 23:26:18 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Objekte nachträglich in abgeleitete Objekte umwandeln</p>
</blockquote>
<p>Das geht nicht.</p>
</blockquote>
<p>Muss es portierbar sein? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112259</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Mon, 29 Aug 2011 23:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Tue, 30 Aug 2011 02:24:55 GMT]]></title><description><![CDATA[<p>Dobi schrieb:</p>
<blockquote>
<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Objekte nachträglich in abgeleitete Objekte umwandeln</p>
</blockquote>
<p>Das geht nicht.</p>
</blockquote>
<p>Muss es portierbar sein? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ach Kinder hört doch mit dem Scheiss auf!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112282</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 02:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Tue, 30 Aug 2011 02:32:56 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>Oder wie könnte ich sonst während das Programm läuft verschiedene von der Benutzereingabe abhängige Objekte erstellen?</p>
</blockquote>
<p>Äh.<br />
Kennst du &quot;if&quot;, &quot;new&quot;, Zeiger und Container (bzw. Arrays tuns auch)?<br />
Falls die Antwort 4x &quot;ja&quot; ist dann verstehe ich dein Problem nicht.<br />
Falls du ein oder mehr &quot;nein&quot; dabei hast, dann ist das dein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112283</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 02:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Tue, 30 Aug 2011 12:11:32 GMT]]></title><description><![CDATA[<p>Jonas OSDever schrieb:</p>
<blockquote>
<p>Du erstellst die Objekte während der laufzeit mit new und Speicherst sie z.B. in einem Array von einheit-pointern</p>
</blockquote>
<p>Wie gehts das? Ein abgeleitetes Objekt in einem Vaterklasse-Zeiger speichern?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@seppj</a>: Danke für die viele Mühe, ich werds ausprobieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112469</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte nachträglich in abgeleitete Objekte umwandeln on Tue, 30 Aug 2011 12:12:54 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>Jonas OSDever schrieb:</p>
<blockquote>
<p>Du erstellst die Objekte während der laufzeit mit new und Speicherst sie z.B. in einem Array von einheit-pointern</p>
</blockquote>
<p>Wie gehts das? Ein abgeleitetes Objekt in einem Vaterklasse-Zeiger speichern?</p>
</blockquote>
<p>Genau das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112470</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 30 Aug 2011 12:12:54 GMT</pubDate></item></channel></rss>