<?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 einer virtuellen Funktion im Konstruktor]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann ich in einem Kostruktor eine virtuelle Funktion aufrufen?<br />
Zu dem Zeitpunkt des Aufrufs innerhalb der Basisklasse wird es ja noch als Objekt<br />
der Basisklasse behandelt. -&gt; Warnung und es funkt folglich auch nicht<br />
Gibt es da einen Workaround oder so?</p>
<p>Ich möchte das Objekt statisch bei Programmstart erzeugen, also bringt mich nen<br />
Konstruktoraufruf mit anschließendem init nicht weiter.<br />
Klar kann ich nen Hilfs-Objekt erstellen, das mir dieses Objekt erzeugt und<br />
die init Methode aufruft, aber geht es auch anders/einfacher?</p>
<p>Gruß,<br />
C++ Anfänger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193619/aufruf-einer-virtuellen-funktion-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 04:46:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193619.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Sep 2007 00:00:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufruf einer virtuellen Funktion im Konstruktor on Fri, 28 Sep 2007 00:00:24 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann ich in einem Kostruktor eine virtuelle Funktion aufrufen?<br />
Zu dem Zeitpunkt des Aufrufs innerhalb der Basisklasse wird es ja noch als Objekt<br />
der Basisklasse behandelt. -&gt; Warnung und es funkt folglich auch nicht<br />
Gibt es da einen Workaround oder so?</p>
<p>Ich möchte das Objekt statisch bei Programmstart erzeugen, also bringt mich nen<br />
Konstruktoraufruf mit anschließendem init nicht weiter.<br />
Klar kann ich nen Hilfs-Objekt erstellen, das mir dieses Objekt erzeugt und<br />
die init Methode aufruft, aber geht es auch anders/einfacher?</p>
<p>Gruß,<br />
C++ Anfänger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374109</guid><dc:creator><![CDATA[C++ Anfänger :)]]></dc:creator><pubDate>Fri, 28 Sep 2007 00:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer virtuellen Funktion im Konstruktor on Fri, 28 Sep 2007 01:41:46 GMT]]></title><description><![CDATA[<p>C++ Anfänger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> schrieb:</p>
<blockquote>
<p>Hallo zusammen,</p>
<p>kann ich in einem Kostruktor eine virtuelle Funktion aufrufen?</p>
</blockquote>
<p>klar</p>
<blockquote>
<p>Zu dem Zeitpunkt des Aufrufs innerhalb der Basisklasse wird es ja noch als Objekt<br />
der Basisklasse behandelt.</p>
</blockquote>
<p>genau</p>
<blockquote>
<p>-&gt; Warnung und es funkt folglich auch nicht</p>
</blockquote>
<p>es &quot;funkt&quot; schon, es wird im ctor A::A die funktion A::f aufgerufen und im ctor B::B die funktion B::f etc. wenn du ein B konstruierst (und B von A abgeleitet ist), wird im ctor von A natürlich NICHT B::f aufgerufen, sondern A::f. der aufruf selbst ist aber erlaubt, solange die funktion nicht gleichzeitig &quot;pure&quot; ist.</p>
<blockquote>
<p>Gibt es da einen Workaround oder so?</p>
</blockquote>
<p>nope. anderes design verwenden. 2 phase construction (igitt) wenns sein muss.</p>
<blockquote>
<p>Ich möchte das Objekt statisch bei Programmstart erzeugen, also bringt mich nen<br />
Konstruktoraufruf mit anschließendem init nicht weiter.</p>
</blockquote>
<p>hm</p>
<blockquote>
<p>Klar kann ich nen Hilfs-Objekt erstellen, das mir dieses Objekt erzeugt und<br />
die init Methode aufruft, aber geht es auch anders/einfacher?</p>
<p>Gruß,<br />
C++ Anfänger</p>
</blockquote>
<p>nicht dass ich wüsste.<br />
was willste denn genau machen?</p>
<p>BTW: &quot;statische objekte&quot; sind sowieso pöse und du solltest gucken dass du ohne sowas auskommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374119</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 28 Sep 2007 01:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer virtuellen Funktion im Konstruktor on Fri, 28 Sep 2007 11:33:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möche ein Programm schreiben, das auf mehreren Plattformen kompilierbar ist.<br />
Da ich kein Befürworter von Makros bin, schreibe ich alle eine Basisklasse, die<br />
unter Windows und Mac OS X kompilierbar ist. Die jeweiligen OS X bzw. Windows<br />
Klassen schreibe ich einen Ordner, der nur unter dem jeweiligen Betriebssystem<br />
mitkompiliert wird.</p>
<p>Jetzt habe ich einen ScreenshotManager.<br />
Dieser Manager soll dafür verantwortlich sein, dass er neue Objekte der<br />
Klasse Screenshot erstellt. Hierzu habe ich ein in ScreenshotManager folgendes<br />
definiert:</p>
<p>static std::auto_ptr&lt;ScreenshotManager&gt; instance;</p>
<p>Die Objekterstellung führe ich in der OSX-Datei durch:<br />
std::auto_ptr&lt;ScreenshotManager&gt; ScreenshotManager::instance(new OSXScreenshotManager());</p>
<p>-&gt; Projekt nicht kompilierbar, wenn keine plattformabhängige Datei nicht da ist<br />
(ist aber auch nicht schlimm)</p>
<p>In dieser init-Funktion möchte ich dann einmal die Bildschirmgröße ermitteln.<br />
Natürlich kann ich mir vor jedem Screenshot die größen ermitteln, aber das<br />
finde ich auch nicht so prickelnd ^^</p>
<p>Gruß,<br />
C++ Anfänger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374346</guid><dc:creator><![CDATA[C++ Anfänger :)]]></dc:creator><pubDate>Fri, 28 Sep 2007 11:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer virtuellen Funktion im Konstruktor on Fri, 28 Sep 2007 12:21:20 GMT]]></title><description><![CDATA[<p>Jetzt ist mir gerade beim Mensen aufgefallen, dass ich gar nicht geschrieben habe,<br />
warum ich die Größen schon im Basiskonstruktor brauche.</p>
<p>Anhand der Größen reserviere ich mir schon Speicherplatz.</p>
<p>Ich glaub ich rufe in beiden abgeleiteten Konstruktoren eine Speicherplatz-<br />
Reservierungsfunktion explizit auf.</p>
<p>Gruß,<br />
C++ Anfänger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374373</guid><dc:creator><![CDATA[C++ Anfänger :)]]></dc:creator><pubDate>Fri, 28 Sep 2007 12:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer virtuellen Funktion im Konstruktor on Fri, 28 Sep 2007 17:50:46 GMT]]></title><description><![CDATA[<p>Also da würde ich mir mal nix antun und das einfach so lassen.<br />
Wenn das was du in der Basisklasse machen könntest viel ist (mehr als 1-2 Zeilen), dann pack es doch in eine Funktion und ruf die Funktion der Basisklasse vom abgeleiteten Ctor auf, nachdem du dort die Grösse festgestellt hast.</p>
<p>Andrerseits würde ich wohl ursprünglich garkeinen Speicher anfordern und das erst dort machen wo der erste Screenshot gemacht werden soll. Ich denke mal man sollte sowieso immer überprüfen ob sich vielleicht die Auflösung gegenüber dem letzten Screenshot geändert hat - unter Windows zumindest kann man die ja sehr leicht umstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374573</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 28 Sep 2007 17:50:46 GMT</pubDate></item></channel></rss>