<?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[Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc.]]></title><description><![CDATA[<p>also eigentlich handelt es sich hier nicht um ein konretes problem sondern um eine verständnisfrage.</p>
<p>gut, nun zur frage:<br />
ich habe eine abstrakte Basisklasse, welche die Funktion<br />
virtual void ShutdownSystem() = 0 ;<br />
deklariert (ich hoffe das ist die richtige bezeichnung dafür)<br />
ich leite nun z. B. meinen Server davon ab und implemetiere nun diese Funktion.<br />
Allgemein wird public vererbt und es handelt sich um eine einfache Vererbung, sprich keine virtelle Vererbung.<br />
Destruktoren sind in Basis und abgeleiteter Klasse ebenfalls virtuell.</p>
<p>Nun zur Frage, wenn ich ShutdownSystem im Destruktor der Basisklasse rufe was passiert dann?</p>
<p>a) die Implementierung der abgeleiteten Klasse wird gerufen<br />
b) es fliegt mir die Methode mit ner pure function call Exception um die ohren</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162223/fragezu-virtuelle-abstrakte-methoden-ableiten-etc</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 03:11:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162223.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Oct 2006 13:46:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Mon, 16 Oct 2006 13:46:46 GMT]]></title><description><![CDATA[<p>also eigentlich handelt es sich hier nicht um ein konretes problem sondern um eine verständnisfrage.</p>
<p>gut, nun zur frage:<br />
ich habe eine abstrakte Basisklasse, welche die Funktion<br />
virtual void ShutdownSystem() = 0 ;<br />
deklariert (ich hoffe das ist die richtige bezeichnung dafür)<br />
ich leite nun z. B. meinen Server davon ab und implemetiere nun diese Funktion.<br />
Allgemein wird public vererbt und es handelt sich um eine einfache Vererbung, sprich keine virtelle Vererbung.<br />
Destruktoren sind in Basis und abgeleiteter Klasse ebenfalls virtuell.</p>
<p>Nun zur Frage, wenn ich ShutdownSystem im Destruktor der Basisklasse rufe was passiert dann?</p>
<p>a) die Implementierung der abgeleiteten Klasse wird gerufen<br />
b) es fliegt mir die Methode mit ner pure function call Exception um die ohren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155742</guid><dc:creator><![CDATA[Jason_Frost]]></dc:creator><pubDate>Mon, 16 Oct 2006 13:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Mon, 16 Oct 2006 15:49:07 GMT]]></title><description><![CDATA[<p>Jason_Frost schrieb:</p>
<blockquote>
<p>... deklariert (ich hoffe das ist die richtige bezeichnung dafür)</p>
</blockquote>
<p>Ja.</p>
<p>Jason_Frost schrieb:</p>
<blockquote>
<p>Allgemein wird public vererbt und es handelt sich um eine einfache Vererbung, sprich keine virtelle Vererbung.</p>
</blockquote>
<p>Multiple Inheritance != Virtual Inheritance <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>Jason_Frost schrieb:</p>
<blockquote>
<p>Nun zur Frage, wenn ich ShutdownSystem im Destruktor der Basisklasse rufe was passiert dann?</p>
<p>a) die Implementierung der abgeleiteten Klasse wird gerufen<br />
b) es fliegt mir die Methode mit ner pure function call Exception um die ohren</p>
</blockquote>
<p>Was hat denn dein Test ergeben? A, b oder vielleicht c?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155831</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Mon, 16 Oct 2006 15:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Tue, 17 Oct 2006 00:51:03 GMT]]></title><description><![CDATA[<p>Im Destructor der Basisklasse hast du nurmehr die virtuellen Funktionen der Basisklasse zur Verfügung. Laut Standard hat es sich dort dann also um die Ohren zu fliegen wie du das sagst <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="😉"
    /><br />
Was passiert wenn du die Funktion in der Basisklasse pure machst aber trotzdem implementierst (ja, das geht!) weiss ich nicht - müsste ich nachgucken bzw. ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1156003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1156003</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Tue, 17 Oct 2006 00:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Tue, 17 Oct 2006 01:33:11 GMT]]></title><description><![CDATA[<p>es darf keine funktion einer abgeleiteten klasse aufgerufen werden, da der dtor der abgeleiteten klasse schon abgearbeitet wurde und es kein abgeleitetes objekt mehr gibt (und zufällig hat der dtor der abgeleiteten klasse als mit unsichtbarem befehl den vptr auf die vtable der basisklasse umgebogen, so wie der ctor seinerzeit ihn auf die vtable der abgeleiteten klasse umgebogen hat).<br />
ein pure-virtual-function-call ist viel leichter zu jagen, als ein zugriff auf den {gelöschten!} string, der member der geerbten klasse ist und praktisch immer funktioniert (hatte mal ein projekt, wo es ca. 200000 zu 1 funktionierte und im gegenzug nur alle zwei wochen unvorhersagbar ausstieg), außer manchmal, wenn genau die paar freigegebenen bytes nen 64-k-block ganz freigemacht haben (mit pech: *und* zwischen dtor der geerbten klasse und dtor der basisklasse ein prozesswechsel war (mit noch mehr pech: *und* das bs oder das laufzeitsystem lust hatte, den speicher freizugeben)).<br />
gegen eine implemetierte pure virtual function der basisklasse ist gar nix einzuwenden.<br />
eigentlich doof vom compiler, wenn er erlaubt, im dtor ne nicht-implementierte pure-virtual-function aufzurufen. wäre mal sinnvoller, als wegen &quot;void main()&quot; rumzuwarnen. ups, der compiler weiß ja gar nicht, ob sie in einer anderen übersetzungseinheit implementiert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1156005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1156005</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 17 Oct 2006 01:33:11 GMT</pubDate></item><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Tue, 17 Oct 2006 07:29:43 GMT]]></title><description><![CDATA[<p>dachte ich mir, in gewisser weise auch logisch dass fall b eintritt. hab mir da vorgestern mit sowas ins knie geschossen und nachdem ich das nachvollzogen hat warum und wieso, dacht ich mal hab ichs tatsächlich richtig verstanden. postest es hier einfach mal.</p>
<p>das interessante ist, wenn man die Methode in einer andere nicht virtuellen Methode unterbringt und diese ruft sagt der Compiler nichts.<br />
Wenn man es direkt in dtor ruft, dann gibts nenn linkerfehler und wenn ich virtual vererbe kann ichs im dtor ebenfalls reinschreiben und es kracht dann eben.<br />
was sich wohl bei virtueller vererbung durch das mögliche vorhandensein mehrfacher vtable</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a><br />
Multiple Inheritance != Virtual Inheritance<br />
das weiss ich ;), habs wohl zu undeutlich geschrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1156031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1156031</guid><dc:creator><![CDATA[Jason_Frost]]></dc:creator><pubDate>Tue, 17 Oct 2006 07:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to Fragezu: virtuelle&#x2F;abstrakte Methoden, Ableiten etc. on Tue, 17 Oct 2006 07:39:31 GMT]]></title><description><![CDATA[<p>Der Grund dafür liegt in der speziellen Verarbeitung der Destruktoren - die bauen dein Objekt stückweise von außen nach innen ab. Das heißt, in dem Moment, wo der Destruktor der Basisklasse aufgerufen wird, ist der Dtor der abgeleiteten Klasse schon fertig und hat die Teile des Objekts, die zur abgeleiteten Klasse gehören, schon entsorgt (inklusive der vtable - so daß du nur noch die abstrakte Methode hast).</p>
<p>Im Gegensatz dazu arbeiten &quot;normale&quot; Methoden mit einem vollständig aufgebauten Objekt, haben also auch immer die korrekte vtable, um die spezialisierte Version deiner Methode zu erreichen.</p>
<p>(PS: Im Konstruktor dürftest du die selben Probleme mit der abstrakten Methode bekommen, da der Anteil der abgeleiteten Klasse (inklusive deiner Spzialisierung) noch nicht angelegt ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1156038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1156038</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 17 Oct 2006 07:39:31 GMT</pubDate></item></channel></rss>