<?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[Aufruf virtueller Funktionen im Konstruktor]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mir ist klar, dass bei einem Funktionsaufruf im Konstruktor, die vtable<br />
für erbende Klassen noch nicht vollständig initialisiert ist, so dass die Methoden<br />
der aktuellen Klasse aufgerufen werden.</p>
<p>Als Beispiel:<br />
Ich habe eine Fensterklasse MyWindow mit einer Methode</p>
<pre><code class="language-cpp">virtual const std::string&amp; getWindowTitle();
</code></pre>
<p>Diese Methode wird im Konstruktor aufgerufen.<br />
In Klassen, die von MyWindow erben, wird (verständlicherweise) nicht<br />
die überschriebene Methode aufgerufen, so dass mein Fenster-Titel nicht stimmt.</p>
<p>Wie geht ihr in solchen Fällen vor?<br />
Eine init-Funktion nach dem Konstruktor aufrufen, finde ich eigentlich blöd.<br />
Gibt es da einen anderen Workaround?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247627/aufruf-virtueller-funktionen-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 11:02:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247627.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Aug 2009 13:04:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:04:44 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mir ist klar, dass bei einem Funktionsaufruf im Konstruktor, die vtable<br />
für erbende Klassen noch nicht vollständig initialisiert ist, so dass die Methoden<br />
der aktuellen Klasse aufgerufen werden.</p>
<p>Als Beispiel:<br />
Ich habe eine Fensterklasse MyWindow mit einer Methode</p>
<pre><code class="language-cpp">virtual const std::string&amp; getWindowTitle();
</code></pre>
<p>Diese Methode wird im Konstruktor aufgerufen.<br />
In Klassen, die von MyWindow erben, wird (verständlicherweise) nicht<br />
die überschriebene Methode aufgerufen, so dass mein Fenster-Titel nicht stimmt.</p>
<p>Wie geht ihr in solchen Fällen vor?<br />
Eine init-Funktion nach dem Konstruktor aufrufen, finde ich eigentlich blöd.<br />
Gibt es da einen anderen Workaround?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760108</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:07:43 GMT]]></title><description><![CDATA[<p>Ich mache eine init() Funktion und eine Factory, welche sicherstellt, dass init() aufgerufen wird.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760112</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:09:31 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Ich mache eine init() Funktion und eine Factory, welche sicherstellt, dass init() aufgerufen wird.<br />
Simon</p>
</blockquote>
<p>Dito. Eine Abart davon ist ein sog. &quot;virtueller Konstruktor&quot;, der aber im grunde auch nichts anderes macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760115</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:10:52 GMT]]></title><description><![CDATA[<p>Merci!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760117</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:10:52 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:14:02 GMT]]></title><description><![CDATA[<p>Wobei sich die Frage stellt, warum getWindowTitle ueberhaupt virtuell sein sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760118</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Thu, 13 Aug 2009 13:56:46 GMT]]></title><description><![CDATA[<p>Wobei sich mir die Frage stellt, woher SomeSubclass::getWindowTitle() denn den Titel hat. Wir sind ja immerhin erst im Ctor. Ist es ein Parameter des Ctors der Unterklasse? Und wäre es dann nicht besser, wenn die Unterklasse innerhalb ihres Ctors setWindowTitle() aufrufen würde?</p>
<p>Kurz: Mir ist jedes Design suspekt, das einen zwingt, über solche Dinge nachzudenken.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760145</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Thu, 13 Aug 2009 13:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Fri, 14 Aug 2009 10:18:01 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Wobei sich die Frage stellt, warum getWindowTitle ueberhaupt virtuell sein sollte.</p>
</blockquote>
<p>hmm... Ich verstehe nicht ganz, was du meinst...<br />
Wie soll man es denn sonst machen? Als Template? Als Parameter, obwohl<br />
das abgeleitete Fenster immer den gleichen Titel hat?</p>
<p>DStefan schrieb:</p>
<blockquote>
<p>Kurz: Mir ist jedes Design suspekt, das einen zwingt, über solche Dinge nachzudenken.</p>
</blockquote>
<p>Wie willst du es denn machen? Als Parameter an den Konstruktor übergeben?<br />
Der Titel ist statisch. Einmal habe ich ein Fenster um mir etwas generell anzukucken<br />
und das davon ableitende Fenster ist um etwas genauer zu analysieren. Der Fenster-<br />
Titel war nur das einfachere Beispiel, aber analog mache ich das auch für:</p>
<pre><code class="language-cpp">MyWidget* createInfoWidget();
</code></pre>
<p>Hier kommt ein Parameter wohl nicht mehr in Frage.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1760629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1760629</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 14 Aug 2009 10:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf virtueller Funktionen im Konstruktor on Sat, 15 Aug 2009 15:37:19 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie soll man es denn sonst machen?</p>
</blockquote>
<p>Ich kenne dein Problem nicht, also das uebergeordnete. Wie sollte ich dir da helfen koennen? Btw. Wenn der Titel statisch ist, kannst du ihn auch const und public machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761414</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 15 Aug 2009 15:37:19 GMT</pubDate></item></channel></rss>