<?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[typeid der child klasse]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>mein Problem ist ich habe eine Liste vom mit Zeigern vom Basetyp und möchte nun wissen von welchem Childtyp das Objekt ist. Nun weiss ich nicht genau wie ich den Typ rauskriege, den typeid() gibt mir nur den Basetyp zurück also die des Zeigers aber nicht des Objektes auf das er zeigt. Ich habe auch versucht den typ durch einen cast heruaszubekommen aber scheinbar kann ich nicht down casten?</p>
<p>hier etwas Beispiel code um mein Problem besser zu beschreiben</p>
<pre><code class="language-cpp">class base{
  void function()
};
class foo: base{
};
class bar: base{
};
</code></pre>
<pre><code class="language-cpp">int main(int,int**){
   vector&lt;base*&gt; list;

   foo *f = new foo();
   bar *b = new bar();

   list.push_back(f);
   list.push_back(b);

   for(i != list.end();i){
     i-&gt;update();

     if(typeid(foo)== typeid(*i))do_foo_stuff();
     if(typeid(bar)== typeid(*i))do_bar_stuff();
   }
}
</code></pre>
<p>gruss o.g.wrapper</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206959/typeid-der-child-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 21:06:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206959.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Mar 2008 07:15:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to typeid der child klasse on Sun, 02 Mar 2008 07:15:53 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>mein Problem ist ich habe eine Liste vom mit Zeigern vom Basetyp und möchte nun wissen von welchem Childtyp das Objekt ist. Nun weiss ich nicht genau wie ich den Typ rauskriege, den typeid() gibt mir nur den Basetyp zurück also die des Zeigers aber nicht des Objektes auf das er zeigt. Ich habe auch versucht den typ durch einen cast heruaszubekommen aber scheinbar kann ich nicht down casten?</p>
<p>hier etwas Beispiel code um mein Problem besser zu beschreiben</p>
<pre><code class="language-cpp">class base{
  void function()
};
class foo: base{
};
class bar: base{
};
</code></pre>
<pre><code class="language-cpp">int main(int,int**){
   vector&lt;base*&gt; list;

   foo *f = new foo();
   bar *b = new bar();

   list.push_back(f);
   list.push_back(b);

   for(i != list.end();i){
     i-&gt;update();

     if(typeid(foo)== typeid(*i))do_foo_stuff();
     if(typeid(bar)== typeid(*i))do_bar_stuff();
   }
}
</code></pre>
<p>gruss o.g.wrapper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466434</guid><dc:creator><![CDATA[O.G.Wrapper]]></dc:creator><pubDate>Sun, 02 Mar 2008 07:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Sun, 02 Mar 2008 07:27:18 GMT]]></title><description><![CDATA[<p>dir fehlt ein virtueller destruktor in der basisklasse. (im prinzip reicht irgendeine virtuelle funktion, aber wenn du mit polymorphie arbeitest solltest du sowieso *immer* einen virtuellen destruktor haben)<br />
ohne virtuelle funktion bekommst du mit RTTI nur den statischen typ (also base&amp;).</p>
<p>btw: immer <code>&lt;typeinfo&gt;</code> inkludieren, wenn du mit <code>typeid</code> arbeitest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466436</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 02 Mar 2008 07:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Sun, 02 Mar 2008 09:55:26 GMT]]></title><description><![CDATA[<p>Also ich habe bei der base klasse den destruktor virtual gesetzt und bekomme immer noch die selben wert von typeid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466479</guid><dc:creator><![CDATA[O.G.Wrapper]]></dc:creator><pubDate>Sun, 02 Mar 2008 09:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Sun, 02 Mar 2008 10:25:04 GMT]]></title><description><![CDATA[<p>Ich hab mir den aufruf der destructoren dann mal ausgeben lassen und dabei bemerkt das der destructor nicht automatisch von vector&lt;T&gt;.clear() aufgerufen wird. Also rufe ich ihn jetzt haendig auf und dann werden auch beide destruktoren aufgerufen. Ich nutze den gcc version 4.3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466493</guid><dc:creator><![CDATA[O.G.Wrapper]]></dc:creator><pubDate>Sun, 02 Mar 2008 10:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Sun, 02 Mar 2008 13:21:35 GMT]]></title><description><![CDATA[<p>O.G.Wrapper schrieb:</p>
<blockquote>
<p>Ich hab mir den aufruf der destructoren dann mal ausgeben lassen und dabei bemerkt das der destructor nicht automatisch von vector&lt;T&gt;.clear() aufgerufen wird. Also rufe ich ihn jetzt haendig auf und dann werden auch beide destruktoren aufgerufen. Ich nutze den gcc version 4.3</p>
</blockquote>
<p><code>vector&lt;T&gt;::clear</code> ruft sehr wohl die destruktoren auf, allerdings natürlich den <code>T::~T</code> -destruktor. wenn <code>T</code> ein zeiger ist, dann wird der also &quot;destruktor&quot; für den zeiger aufgerufen, aber nicht der destruktor für das objekt, auf das er zeigt.</p>
<p>im übrigen war das auch dein ursprünglicher fehler (neben dem fehlen von <code>virtual</code> ):</p>
<pre><code class="language-cpp">if (typeid (**i) == typeid(foo))
</code></pre>
<p>zweimal dereferenzieren, denn <code>*i</code> gibt dir ja nur einen zeiger auf base zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466611</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 02 Mar 2008 13:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Mon, 03 Mar 2008 00:02:25 GMT]]></title><description><![CDATA[<p>danke funktioniert jetzt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1467047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467047</guid><dc:creator><![CDATA[O.G.Wrapper]]></dc:creator><pubDate>Mon, 03 Mar 2008 00:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to typeid der child klasse on Mon, 03 Mar 2008 00:09:17 GMT]]></title><description><![CDATA[<p>O.G.Wrapper schrieb:</p>
<blockquote>
<p>Hallo Leute,</p>
<p>mein Problem ist ich habe eine Liste vom mit Zeigern vom Basetyp und möchte nun wissen von welchem Childtyp das Objekt ist. Nun weiss ich nicht genau wie ich den Typ rauskriege, den typeid() gibt mir nur den Basetyp zurück also die des Zeigers aber nicht des Objektes auf das er zeigt. Ich habe auch versucht den typ durch einen cast heruaszubekommen aber scheinbar kann ich nicht down casten?</p>
<p>hier etwas Beispiel code um mein Problem besser zu beschreiben</p>
<pre><code class="language-cpp">class base{
  void function()
};
class foo: base{
};
class bar: base{
};
</code></pre>
<pre><code class="language-cpp">int main(int,int**){
   vector&lt;base*&gt; list;

   foo *f = new foo();
   bar *b = new bar();

   list.push_back(f);
   list.push_back(b);

   for(i != list.end();i){
     i-&gt;update();

     if(typeid(foo)== typeid(*i))do_foo_stuff();
     if(typeid(bar)== typeid(*i))do_bar_stuff();
   }
}
</code></pre>
<p>gruss o.g.wrapper</p>
</blockquote>
<p>Das sieht nach einem Design-Fehler aus. Wenn man mehr die Hintergründe kennen würde, könnte man vllt das Problem umgehen und wohlmöglich sowas draus basteln:</p>
<pre><code class="language-cpp">for(i != list.end();i){
     i-&gt;update();
     i-&gt;do_stuff(); // do_struff -&gt; virtual
   }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1467052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467052</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Mar 2008 00:09:17 GMT</pubDate></item></channel></rss>