<?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[Aus Basisklasse, abgeleitete Methode aufrufen]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin gerade arg verwirrt warum folgender Code nicht funktioniert:</p>
<pre><code class="language-cpp">class base
{
public:
  virtual anyBaseObject* createObj() { return standardBaseObject(); }
  base() { createObj(); }
};

class derived : public base
{
public:
  virtual anyBaseObject* createObj() { return derivedBaseObject(); }
  derived() : base() { }
};

derived test; //derived::createObj never gets called
</code></pre>
<p>Sollte nicht im konstruktor der base Klasse die createObj Funktion von derived aufgerufen werden?</p>
<p>Wenn nicht, wie ist sowas elegant möglich?<br />
Besten Dank für Hilfe,<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268518/aus-basisklasse-abgeleitete-methode-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 17:53:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268518.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Jun 2010 11:42:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aus Basisklasse, abgeleitete Methode aufrufen on Thu, 10 Jun 2010 11:42:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin gerade arg verwirrt warum folgender Code nicht funktioniert:</p>
<pre><code class="language-cpp">class base
{
public:
  virtual anyBaseObject* createObj() { return standardBaseObject(); }
  base() { createObj(); }
};

class derived : public base
{
public:
  virtual anyBaseObject* createObj() { return derivedBaseObject(); }
  derived() : base() { }
};

derived test; //derived::createObj never gets called
</code></pre>
<p>Sollte nicht im konstruktor der base Klasse die createObj Funktion von derived aufgerufen werden?</p>
<p>Wenn nicht, wie ist sowas elegant möglich?<br />
Besten Dank für Hilfe,<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909969</guid><dc:creator><![CDATA[Timo.Stark]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Basisklasse, abgeleitete Methode aufrufen on Thu, 10 Jun 2010 11:51:12 GMT]]></title><description><![CDATA[<p>Timo.Stark schrieb:</p>
<blockquote>
<p>Sollte nicht im konstruktor der base Klasse die createObj Funktion von derived aufgerufen werden?</p>
</blockquote>
<p>Nein. Das ist Absicht. Zu diesem Zeitpunkt wurde der derived-Teil des Objekts noch gar nicht initialisiert. Du findest im Netz bestimmt gute Eklärungen dazu, wenn Du nach den Stichwörtern C++, constructor, virtual function suchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909977</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Basisklasse, abgeleitete Methode aufrufen on Thu, 10 Jun 2010 11:51:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Sollte nicht im konstruktor der base Klasse die createObj Funktion von derived aufgerufen werden?</p>
</blockquote>
<p>Nein. Im konstruktor der base klasse wird natürlich die version der baseklasse verwendet....<br />
Welche funktion hätte denn sonnst das ableiten und das implemetieren der Funktion in der base Klasse?<br />
Wenn man dann doch überall die selbe Funktion aufruft.<br />
Wenn Du möchtest das für beide die gleiche createObj funktion benutzt wird dann implementiere Sie in der Base und überschreibe sie nicht!</p>
<p>muli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909978</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Basisklasse, abgeleitete Methode aufrufen on Thu, 10 Jun 2010 11:53:31 GMT]]></title><description><![CDATA[<p>Danke, ich nehme dann den Umweg über eine Initalisierungs Funktion</p>
<pre><code class="language-cpp">class base 
{ 
public: 
  virtual anyBaseObject* createObj() { return standardBaseObject(); } 
  base() {  }
  bool init() { createObj(); return true; } 
}; 

class derived : public base 
{ 
public: 
  virtual anyBaseObject* createObj() { return derivedBaseObject(); } 
  derived() : base() { init(); } 
};
</code></pre>
<p>derived test; //derived::createObj never gets called</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909980</guid><dc:creator><![CDATA[Timo.Stark]]></dc:creator><pubDate>Thu, 10 Jun 2010 11:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Basisklasse, abgeleitete Methode aufrufen on Thu, 10 Jun 2010 12:04:05 GMT]]></title><description><![CDATA[<p>Dein Ansatz sieht schon irgendwie komisch aus.<br />
Vielleicht gibt's noch eine bessere Lösung.<br />
ZB kannst Du hier</p>
<pre><code class="language-cpp">derived() : base(...parameter...) { ... }
</code></pre>
<p>dem base-Konstruktor noch Parameter übergeben. Und sonst gab's da auch nen Trick mit virtual inheritance, aber darauf würde ich, soweit es geht, verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1909989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1909989</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 10 Jun 2010 12:04:05 GMT</pubDate></item></channel></rss>