<?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[Vektoren mit verschiedenen Typen, bzw. erbenden Klassen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgendes Problem:</p>
<pre><code class="language-cpp">class object{

void foo();

};

class ErbeI: public object{

void ErbeISpezifischeFunktion();

};

class ErbeII: public object{
(...)
};

//später im main

vector&lt;object&gt; vecObjects;

ErbeI erbI;
vecObjects.push_back(erbI);

ErbeII erbII;
vecObjects.push_back(erbII);

//Somit werden Objekte, die in den Vektor &quot;gesteckt&quot; werden und Erben von object sind gesliced
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Es ist so, dass ich einen Vektor erstellen möchte, der alle Eigenschaften der Erben von object (z.B. ErbeISpezifischeFunktion()) berücksichtigt.</p>
<p>Gibt es eine Möglichkeit, dies zu erreichen?</p>
<p>Mit freundlichen Grüßen<br />
heringsalat100</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287541/vektoren-mit-verschiedenen-typen-bzw-erbenden-klassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 09:32:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287541.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 May 2011 16:31:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 16:31:47 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgendes Problem:</p>
<pre><code class="language-cpp">class object{

void foo();

};

class ErbeI: public object{

void ErbeISpezifischeFunktion();

};

class ErbeII: public object{
(...)
};

//später im main

vector&lt;object&gt; vecObjects;

ErbeI erbI;
vecObjects.push_back(erbI);

ErbeII erbII;
vecObjects.push_back(erbII);

//Somit werden Objekte, die in den Vektor &quot;gesteckt&quot; werden und Erben von object sind gesliced
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Es ist so, dass ich einen Vektor erstellen möchte, der alle Eigenschaften der Erben von object (z.B. ErbeISpezifischeFunktion()) berücksichtigt.</p>
<p>Gibt es eine Möglichkeit, dies zu erreichen?</p>
<p>Mit freundlichen Grüßen<br />
heringsalat100</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071049</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Mon, 30 May 2011 16:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 16:49:01 GMT]]></title><description><![CDATA[<p>Da bietet es sich an, die Objekte dynamisch anzulegen (oder einfacher noch in einem spezialisierten Vector) und dann einen vector mit Basisklassenzeigern zu erstellen. An den Typ des dahinterliegenden Objektes kannst du zur Laufzeit mit dynamic_cast und Konsorten kommen. Da es oftmals auf eine Designschwäche hinweist, wenn man so etwas benötigt, behaupte ich jetzt einfach mal frech, dass dein Problem vermutlich durch virtuelle Funktionen und Polymorphie besser gelöst wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071060</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 May 2011 16:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 16:54:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>das geht nur mit Zeigern, d.h.</p>
<pre><code class="language-cpp">vector&lt;object*&gt; vecObjects;
</code></pre>
<p>so daß du die einzelnen Objekte dann per &quot;new&quot; erstellen mußt (und nach Benutzung dann wieder mittels &quot;delete&quot; freigeben).<br />
Falls du die Objekte in mehreren Containern verwalten willst, dann kannst du auch einen shared_ptr (aus <a href="http://www.boost.org" rel="nofollow">boost</a>) verwenden, welcher die automatische Freigabe durchführt, falls kein Objekt mehr referenziert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071064</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 30 May 2011 16:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 16:57:07 GMT]]></title><description><![CDATA[<p>boost::ptr_vector könnte dir auch behilflich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071066</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 30 May 2011 16:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 17:03:28 GMT]]></title><description><![CDATA[<p>Um das mal klarer zu machen: Auch wenn das oftmals mit new benutzt wird, ist dies keineswegs zwingend. Du darfst auch gerne so etwas wie</p>
<pre><code class="language-cpp">vector&lt;derived1&gt; foo(3);
vector&lt;derived2&gt; bar(3);

vector&lt;base*&gt; foobar;

foobar.push_back(&amp;foo[0]);
foobar.push_back(&amp;foo[1]);
foobar.push_back(&amp;foo[2]);
foobar.push_back(&amp;bar[0]);
foobar.push_back(&amp;bar[1]);
foobar.push_back(&amp;bar[2]);
</code></pre>
<p>machen. Dann sind die Besitzverhältnisse der Pointer und Objekte klar, ohne dass du großen Mehraufwand hättest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071073</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 May 2011 17:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 17:05:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Um das mal klarer zu machen: Auch wenn das oftmals mit new benutzt wird, ist dies keineswegs zwingend. Du darfst auch gerne so etwas wie</p>
<pre><code class="language-cpp">vector&lt;derived1&gt; foo(3);
vector&lt;derived2&gt; bar(3);

vector&lt;base*&gt; foobar;

foobar.push_back(&amp;foo[0]);
foobar.push_back(&amp;foo[1]);
foobar.push_back(&amp;foo[2]);
foobar.push_back(&amp;bar[0]);
foobar.push_back(&amp;bar[1]);
foobar.push_back(&amp;bar[2]);
</code></pre>
<p>machen. Dann sind die Besitzverhältnisse der Pointer und Objekte klar, ohne dass du großen Mehraufwand hättest.</p>
</blockquote>
<p>Schöne Idee, wäre ich nicht drauf gekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071075</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 30 May 2011 17:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 17:37:39 GMT]]></title><description><![CDATA[<p>Erstmal danke für die schnellen Antworten! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Aber wenn ich dem Lösungsvorschlag von SeppJ folge:</p>
<p>(<strong>PS:</strong> ich habe in der Klasse ErbeI einen int var hinzugefügt)</p>
<pre><code class="language-cpp">ErbeI erbI;
erbI.var = 5;

vector&lt;ErbeI&gt; foo(3,erbI);

vector&lt;object*&gt; foobar; 

foobar.push_back(&amp;foo[0]);
foobar.push_back(&amp;foo[1]);
foobar.push_back(&amp;foo[2]);

cout&lt;&lt;foobar[0]-&gt;var&lt;&lt;endl;
</code></pre>
<p>...wird mir vom Compiler gesagt, dass die Klasse object keine Variable mit dem Namen &quot;var&quot; besitzt, da der Vektor ja sogesehen auch nur für object ist.</p>
<p>Das stimmt ja, aber mein Ziel ist es, auch auf die Funktionen, Variablen etc. der erbenden Klassen zugreifen zu können.<br />
Ich könnte natürlich in diesem Fall auf den Vector foo zurückgreifen, aber dies wäre ja ein zweiter Vector, ich habe aber eigentlich vor, einen einzigen Vektor mit allen Eigenschaften der jeweiligen Objekte zu erstellen.</p>
<p>Oder mache ich hier beim Zugriff auf die Eigenschaften der Erben einen Fehler?</p>
<p>Eine Rückmeldung würde mich erfreuen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071094</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Mon, 30 May 2011 17:37:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 17:46:43 GMT]]></title><description><![CDATA[<p>Das was du jetzt brauchst, ist dass du irgendwie feststellen musst, ob das Objekt auf das foobar[0] zeigt auch wirklich ein ErbeI ist. Das kannst du dem Compiler entweder zur Compilezeit mit einem Cast sagen, was keinen Sinn macht, denn wenn du es wüsstest, dann bräuchtest du die Objekte ja gar nicht erst in einen Container für mehrere Objekttypen stecken. Wenn du es daher zur Laufzeit rausfinden willst, dann musst du eine Form von RTTI benutzen, das kann der dynamic_cast sein, oder auch typeid oder irgendwelche Tricks mit dem Adressoperator.</p>
<p>Aber wie ich dir auch schon gesagt habe, hast du vermutlich ein Problem das viel einfacher gelöst werden kann. Denn diese Art der Programmierung deutet sehr oft auf ein grundlegendes Designproblem hin. Es sollte fast nie nötig sein, den Typ eines Objektes zur Laufzeit zu bestimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071100</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 May 2011 17:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 18:08:33 GMT]]></title><description><![CDATA[<p>Aber wieso sollte ich in diesem Fall prüfen, ob foobar[0] wirklich auf ein ErbeI zeigt? Es ist hier doch sicher, dass auf ErbeI gezeigt wird, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071109</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Mon, 30 May 2011 18:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 18:11:50 GMT]]></title><description><![CDATA[<p>Das weißt du - der Compiler weiß nur, daß in foobar Zeiger auf Basis-Objekte enthalten sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071112</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 May 2011 18:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 18:24:09 GMT]]></title><description><![CDATA[<p>OK, danke!</p>
<p>Zu den typeids:</p>
<p>nehmen wir mal an, ich würde typeid verwenden, wie müsste das Programm dann lauten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071120</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Mon, 30 May 2011 18:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 18:34:26 GMT]]></title><description><![CDATA[<p>1. Würde man dazu eher dynamic_cast benutzen in dieser Situation, aber typeid ginge ähnlich.<br />
2. Für all das muss Polymorphie vorliegen, damit der entsprechende Code vorliegt. Vermutlich ist Polymorphie sowieso der Problemlöser den du suchst, ganz ohne typeid oder dynamic_cast, aber du reagierst leider nicht auf Stichworte, noch stellst du dein eigentliches Problem dar. Derzeit sind dein Klassen nicht Polymorph. Mach zur Not eine dummy-Funktion virtuell. Oder den Destruktor, was man ohnehin machen muss, falls du später mal auf die Lösung mit dem new/delete umsteigen willst.<br />
3. Beispiele findet man gut bei Google.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071129</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 May 2011 18:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 19:05:45 GMT]]></title><description><![CDATA[<p>Dann versuche ich mal mein Problem klarer darzustellen:</p>
<p>Die vorangegangenen Beispiele sollten nur die Problemstellung, die ich meinte, vereinfachen, aber ich werde jetzt mal explizit:</p>
<p>Also:</p>
<p>Momentan bin ich dabei, ein 2D-Vogelperspektiven-Spiel zu programmieren. Dieses Spiel beinhaltet u.a.</p>
<p>|graphicsobject|-&gt;|object|-&gt;|usable_ob |-&gt;|fridge|</p>
<p>(unvollständig)</p>
<p>Dazu gibt es eine map-class, welche wegen der Flexibilität auf Vektoren basieren soll.</p>
<p>So:<br />
Nun, wenn ich mit meinem Männchen z.B. einen fridge benutze und etwas esse, ändert sich die Menge an Essen im fridge.</p>
<p>Aber da meine Map ja nur object und keinen fridge oder sonstiges kennt, da sie ja aus objects besteht, kann ich auf die Variable Menge beim fridge nicht zugreifen.</p>
<p>Habe ich jetzt mein eigentliches Problem dargestellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071147</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Mon, 30 May 2011 19:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Mon, 30 May 2011 19:26:30 GMT]]></title><description><![CDATA[<p>Heringsalat100 schrieb:</p>
<blockquote>
<p>Habe ich jetzt mein eigentliches Problem dargestellt?</p>
</blockquote>
<p>Jupp. Und ich bin überzeugter denn je, Polymorphie wäre die Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071162</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 30 May 2011 19:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Tue, 31 May 2011 14:51:38 GMT]]></title><description><![CDATA[<p>Jetzt habe ich ja wenigstens eine Richtung, in die ich weiter erfragen kann...</p>
<p>Erstmale danke, dass du immer noch rückantwortest! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Nehmen wir dann an, ich nehme Polymorphie.</p>
<p>Inwiefern muss ich virtual benutzen, um meine Variable &quot;Menge&quot; vom &quot;fridge&quot; auch in Vektoren der Klasse &quot;object&quot; berücksichtigen zu können?</p>
<pre><code class="language-cpp">class graphicsobject{...};
class object: public graphicsobject{...};
class usable_ob: public object{...};
class fridge: public usable_ob{int Menge;};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071515</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Tue, 31 May 2011 14:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Tue, 31 May 2011 17:13:44 GMT]]></title><description><![CDATA[<p>Die Idee wäre etwas in dieser Art:</p>
<pre><code class="language-cpp">class usable_object
{
public:
  virtual void use(Hero &amp;)=0;
  virtual void describe() const =0;
  virtual ~usable_object()=0;
};

usable_object::~usable_object() {}

class fridge: public usable_object
{
  unsigned number_of_apples;
public:
  fridge(unsigned number_of_apples): number_of_apples(number_of_apples) {}
  virtual void describe() const
  {
    if (number_of_apples)
      cout &lt;&lt; &quot;Ein Kühlschrank mit &quot; &lt;&lt;  number_of_apples &lt;&lt; &quot;Äpfeln.\n&quot;;
    else
      cout &lt;&lt; &quot;Ein leerer Kühlschrank.\n&quot;;
  }
  virtual void use(Hero&amp; hero)
  {
    if (number_of_apples)
      {
        cout &lt;&lt; &quot;Du isst einen Apfel. Du fühlst dich stärker.\n&quot;;
        --number_of_apples;
        hero.increase_health(1);
      }
    else
      cout &lt;&lt; &quot;Der Kühlschrank ist leer.\n&quot;;
  }
  virtual ~fridge() {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071616</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 31 May 2011 17:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to Vektoren mit verschiedenen Typen, bzw. erbenden Klassen on Wed, 01 Jun 2011 12:27:32 GMT]]></title><description><![CDATA[<p>Danke, diese Lösung funktioniert! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Aber dennoch danke an alle, die geantwortet haben! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2072003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072003</guid><dc:creator><![CDATA[Heringsalat100]]></dc:creator><pubDate>Wed, 01 Jun 2011 12:27:32 GMT</pubDate></item></channel></rss>