<?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[Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen]]></title><description><![CDATA[<p>Ich arbeite mich gerade mit Hilfe eines Buchs etwas in C++ ein aber beim letzten Kapitel hatte ich einige Verständnisprobleme, und zwar: da war die Rede von abstrakten Basisklassen - soweit hab ich noch alles verstanden. Jetzt wird von dieser Basisklasse eine neue Klasse &quot;Derived&quot; abgeleitet (alle virtual [...]=0 Methoden werden überschrieben) und einige Methoden werden zu dieser neuen Klasse hinzugefügt. Jetzt steht dort, dass wenn eine neue Methode der Klasse &quot;Derived&quot; nicht zu der Basisklasse passt, der Compiler meckern würde. Wenn man mit einem BasePtr auf die Klasse Derived zeigt muss man also eine dynamic_cast zu Derived machen.</p>
<p>Jetzt verstehe ich nicht:</p>
<p>1. Warum muss der cast hier erfolgen?<br />
2. Ist das nur bei abstrakten Basisklassen so?<br />
3. Und vor allem <strong>Wie entscheidet der Compiler ob die Methode zur Basisklasse passt???</strong></p>
<p>Vielen Dank für euere Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171923/kann-mir-das-mal-jemand-erklären-dynamic_cast-bei-abstrakten-basisklassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 15:27:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171923.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jan 2007 17:38:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 17:38:28 GMT]]></title><description><![CDATA[<p>Ich arbeite mich gerade mit Hilfe eines Buchs etwas in C++ ein aber beim letzten Kapitel hatte ich einige Verständnisprobleme, und zwar: da war die Rede von abstrakten Basisklassen - soweit hab ich noch alles verstanden. Jetzt wird von dieser Basisklasse eine neue Klasse &quot;Derived&quot; abgeleitet (alle virtual [...]=0 Methoden werden überschrieben) und einige Methoden werden zu dieser neuen Klasse hinzugefügt. Jetzt steht dort, dass wenn eine neue Methode der Klasse &quot;Derived&quot; nicht zu der Basisklasse passt, der Compiler meckern würde. Wenn man mit einem BasePtr auf die Klasse Derived zeigt muss man also eine dynamic_cast zu Derived machen.</p>
<p>Jetzt verstehe ich nicht:</p>
<p>1. Warum muss der cast hier erfolgen?<br />
2. Ist das nur bei abstrakten Basisklassen so?<br />
3. Und vor allem <strong>Wie entscheidet der Compiler ob die Methode zur Basisklasse passt???</strong></p>
<p>Vielen Dank für euere Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220046</guid><dc:creator><![CDATA[Anfänger_braucht_hilfe]]></dc:creator><pubDate>Tue, 30 Jan 2007 17:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 17:44:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>1. Weil die neue methode nur in der abgeleiteten Klasse existiert und du einen Pointer auf die Basisklasse hast. Du brauchst hier also einen Pointer auf die abgeleitete Klasse.<br />
2. Nein, Das ist auch bei nicht abstrakten Basisklassen so<br />
3. dynamic_cast liefert einen NULL-Pointer wenn die abgeleitete Klasse nicht passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220048</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 Jan 2007 17:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 18:33:55 GMT]]></title><description><![CDATA[<p>@ Braunstein: ok vielen Dank soweit.</p>
<p>noch eine andere Frage hätte ich: Im Buch wird das auch noch mit dem Destruktor und einem BasePtr erklärt. hier reicht ja der pointer auf die Basisklasse um den Destruktor von &quot;Derived&quot; aufzurufen, vorrausgesetzt er ist virtual, soweit noch richtig? dannach ist der destruktor von abgeleiteten Klassen im Buch allerdings in den Beispielen wieder nicht-virtuell. gibts dafür nen Grund bzw. sollte der Destruktur dann nicht allgemein virtuell sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220082</guid><dc:creator><![CDATA[Anfänger_braucht_hilfe]]></dc:creator><pubDate>Tue, 30 Jan 2007 18:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 19:01:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>hier reicht ja der pointer auf die Basisklasse um den Destruktor von &quot;Derived&quot; aufzurufen, vorrausgesetzt er ist virtual, soweit noch richtig?</p>
</blockquote>
<p>Ja das ist richtig.</p>
<blockquote>
<p>dannach ist der destruktor von abgeleiteten Klassen im Buch allerdings in den Beispielen wieder nicht-virtuell. gibts dafür nen Grund bzw. sollte der Destruktur dann nicht allgemein virtuell sein?</p>
</blockquote>
<p>Wenn eine Methode in einer Basisklasse erstmal virtuell ist, sind es auch alle überschriebenen in den abgeleiteten Klassen. Das betrifft auch den Destruktor. Ob du also in den abgeleiteten Klassen virtuell oder nicht davor schreibst, ist dem Compiler egal.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220093</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 30 Jan 2007 19:01:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 21:30:09 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Wenn eine Methode in einer Basisklasse erstmal virtuell ist, sind es auch alle überschriebenen in den abgeleiteten Klassen. Das betrifft auch den Destruktor. Ob du also in den abgeleiteten Klassen virtuell oder nicht davor schreibst, ist dem Compiler egal.</p>
</blockquote>
<p>ne die frage hat sich darauf bezogen dass der destruktor auch in class Base nicht virtuell ist. wie im kapitel zuvor beschrieben kann das allerdings zu problemen führen, deshalb die frage ob der destruktor in der basisklasse immer virtual sein sollte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220211</guid><dc:creator><![CDATA[Anfänger_braucht_hilfe]]></dc:creator><pubDate>Tue, 30 Jan 2007 21:30:09 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir das mal jemand erklären: dynamic_cast bei abstrakten Basisklassen on Tue, 30 Jan 2007 21:35:59 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>dann hast du dirch hier aber falsch ausgedrückt</p>
<blockquote>
<p>dannach ist der destruktor von abgeleiteten Klassen im Buch allerdings in den Beispielen wieder nicht-virtuell</p>
</blockquote>
<p>Der Destruktor der Basisklasse sollte immer virtuell sein. Wenn also eine Klasse dazu gedacht ist, abgeleitet zu werden, immer einen virtuellen Destruktor bereitstellen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220212</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 30 Jan 2007 21:35:59 GMT</pubDate></item></channel></rss>