<?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[dynamic_cast warum geht das nicht?]]></title><description><![CDATA[<p>Warum klappt dies nicht?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Vater 
{
  public: 
    virtual void virt_function() { cout &lt;&lt; &quot;Vater&quot; &lt;&lt; endl; }; 
};

class Kind : public Vater 
{
  public: 
    virtual void virt_function() { cout &lt;&lt; &quot;Kind&quot; &lt;&lt; endl; };      
};

void f(Vater* base)    {base-&gt;virt_function();}   
void g(Kind*  derived) {derived-&gt;virt_function();}

int main()
{
  Vater base;
  Kind  derived;

  f(&amp;base);    //erlaubt! Keine Umwandlung.
  f(&amp;derived); //erlaubt! derived kann in base umgewandelt werden (impliziter Upcast)

  g(dynamic_cast&lt;Kind*&gt;(&amp;base));    //???
  g(&amp;derived); //erlaubt! Keine Umwandlung.
}
</code></pre>
<p>nimmt man static_cast&lt;Kind*&gt; läuft das problemlos. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152629/dynamic_cast-warum-geht-das-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 00:48:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152629.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Jul 2006 21:58:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dynamic_cast warum geht das nicht? on Fri, 07 Jul 2006 21:58:21 GMT]]></title><description><![CDATA[<p>Warum klappt dies nicht?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Vater 
{
  public: 
    virtual void virt_function() { cout &lt;&lt; &quot;Vater&quot; &lt;&lt; endl; }; 
};

class Kind : public Vater 
{
  public: 
    virtual void virt_function() { cout &lt;&lt; &quot;Kind&quot; &lt;&lt; endl; };      
};

void f(Vater* base)    {base-&gt;virt_function();}   
void g(Kind*  derived) {derived-&gt;virt_function();}

int main()
{
  Vater base;
  Kind  derived;

  f(&amp;base);    //erlaubt! Keine Umwandlung.
  f(&amp;derived); //erlaubt! derived kann in base umgewandelt werden (impliziter Upcast)

  g(dynamic_cast&lt;Kind*&gt;(&amp;base));    //???
  g(&amp;derived); //erlaubt! Keine Umwandlung.
}
</code></pre>
<p>nimmt man static_cast&lt;Kind*&gt; läuft das problemlos. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1093638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1093638</guid><dc:creator><![CDATA[please help]]></dc:creator><pubDate>Fri, 07 Jul 2006 21:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to dynamic_cast warum geht das nicht? on Fri, 07 Jul 2006 22:16:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">g(dynamic_cast&lt;Kind*&gt;(&amp;base));    //???
</code></pre>
<p>Die Zeile kann nicht funktionieren, weil ein Vater nicht in sein Kind umgewandelt werden kann, dazu fehlen ihm die nötigen Informationen.<br />
Sagen wir, du fügst dem Kind noch eine Membervariable hinzu. Was soll jetzt der Vater machen, der sich auf einmal als Kind ausgeben soll, aber gar nichts von der Membervariablen weiß? Wenn du darauf einen static_cast anwendest und der zufälligerweise funktioniert, dann bist du denke ich trotzdem im undefinierten Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1093644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1093644</guid><dc:creator><![CDATA[KPC]]></dc:creator><pubDate>Fri, 07 Jul 2006 22:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to dynamic_cast warum geht das nicht? on Fri, 07 Jul 2006 23:17:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Nochmal allgemein zum dynamic_cast: Dieser dient dazu _sichere_ Konvertierungen (meistens downcasts, upcasts sind von vornherein sicher) innerhalb von Vererbungshirarchien zu ermöglichen. D.h. wenn du z.B.</p>
<pre><code class="language-cpp">Vater* v = new Kind;
</code></pre>
<p>hast, dann solltest du den dynamic_cast verwenden.</p>
<pre><code class="language-cpp">g(dynamic_cast&lt;Kind*&gt;(v)); // Falls v auf ein Kind zeigt, wird ein Kind an g() übergeben, andernfalls der NULL-Zeiger.
</code></pre>
<p>Wie KPC bereits bemerkt hat, ist dies allerdings bei dir nicht der Fall..</p>
<p>Gruß, Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1093653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1093653</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Fri, 07 Jul 2006 23:17:56 GMT</pubDate></item></channel></rss>