<?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[Überschriebene Funktion im Basiskonstruktor aufrufen]]></title><description><![CDATA[<p>Hi Leute,<br />
ich habe seit langer Zeit mal wieder versucht eine kleine Konsolenanwendung in C++ zu programmieren und scheitere nun kläglich an einer , denke ich, einfachen Sache. Ich habe leider auch bei Google nichts gefunden was mir so wirklich geholfen hat.<br />
Folgendes ich habe eine Basisklass A. Diese hat einen Konstruktor, der die Funktion foo aufruft.</p>
<pre><code class="language-cpp">class A{
public:
    A();
    void foo();
};
</code></pre>
<pre><code class="language-cpp">A::A(){
    std::cout &lt;&lt; &quot;Konstruktor A&quot; &lt;&lt; std::endl;
    this-&gt;foo();
}

void A::foo(){
    std::cout &lt;&lt; &quot;foo&quot;;
}
</code></pre>
<p>Bis hier her kein Problem. Jetzt kommt jedoch noch die Klasse B, eine Ableitung von A, mit ins Spiel. Auch sie hat einen Konstruktor, der den von A aufrufen soll, und überschreibt dann noch die Funktion foo.</p>
<pre><code class="language-cpp">class B : public A{
public:
    B();
    void foo();
};
</code></pre>
<pre><code class="language-cpp">B::B() : A::A(){
    std::cout &lt;&lt; &quot;Konstruktor B&quot; &lt;&lt;std::endl;
}

void B::foo(){
    A::foo();
    std::cout &lt;&lt; &quot;bar&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Und hier der Aufruf..</p>
<pre><code class="language-cpp">int main(int argc, const char * argv[])
{
    B b;
    return 0;
}
</code></pre>
<p>Ich hätte jetzt folgende Ausgabe erwartet.</p>
<blockquote>
<p>Konstruktor A<br />
foobar<br />
Konstruktor B</p>
</blockquote>
<p>Allerdings bekomme ich</p>
<blockquote>
<p>Konstruktor A<br />
fooKonstruktor B</p>
</blockquote>
<p>Meine Erwartung war also, dass Im Konstruktor von A die foo Funktion von B aufgerufen wird.<br />
Ich habe leider keine Idee was ich falsch mache...oder nach was ich noch Googlen soll...<br />
Meine C++ Kenntnisse wurden leider von der Zeit und vom dauernden programmieren in PHP verwaschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title="=/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310148/überschriebene-funktion-im-basiskonstruktor-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 23:26:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310148.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Nov 2012 22:03:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überschriebene Funktion im Basiskonstruktor aufrufen on Sun, 04 Nov 2012 22:03:25 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
ich habe seit langer Zeit mal wieder versucht eine kleine Konsolenanwendung in C++ zu programmieren und scheitere nun kläglich an einer , denke ich, einfachen Sache. Ich habe leider auch bei Google nichts gefunden was mir so wirklich geholfen hat.<br />
Folgendes ich habe eine Basisklass A. Diese hat einen Konstruktor, der die Funktion foo aufruft.</p>
<pre><code class="language-cpp">class A{
public:
    A();
    void foo();
};
</code></pre>
<pre><code class="language-cpp">A::A(){
    std::cout &lt;&lt; &quot;Konstruktor A&quot; &lt;&lt; std::endl;
    this-&gt;foo();
}

void A::foo(){
    std::cout &lt;&lt; &quot;foo&quot;;
}
</code></pre>
<p>Bis hier her kein Problem. Jetzt kommt jedoch noch die Klasse B, eine Ableitung von A, mit ins Spiel. Auch sie hat einen Konstruktor, der den von A aufrufen soll, und überschreibt dann noch die Funktion foo.</p>
<pre><code class="language-cpp">class B : public A{
public:
    B();
    void foo();
};
</code></pre>
<pre><code class="language-cpp">B::B() : A::A(){
    std::cout &lt;&lt; &quot;Konstruktor B&quot; &lt;&lt;std::endl;
}

void B::foo(){
    A::foo();
    std::cout &lt;&lt; &quot;bar&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Und hier der Aufruf..</p>
<pre><code class="language-cpp">int main(int argc, const char * argv[])
{
    B b;
    return 0;
}
</code></pre>
<p>Ich hätte jetzt folgende Ausgabe erwartet.</p>
<blockquote>
<p>Konstruktor A<br />
foobar<br />
Konstruktor B</p>
</blockquote>
<p>Allerdings bekomme ich</p>
<blockquote>
<p>Konstruktor A<br />
fooKonstruktor B</p>
</blockquote>
<p>Meine Erwartung war also, dass Im Konstruktor von A die foo Funktion von B aufgerufen wird.<br />
Ich habe leider keine Idee was ich falsch mache...oder nach was ich noch Googlen soll...<br />
Meine C++ Kenntnisse wurden leider von der Zeit und vom dauernden programmieren in PHP verwaschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title="=/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2267479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2267479</guid><dc:creator><![CDATA[Farbauti]]></dc:creator><pubDate>Sun, 04 Nov 2012 22:03:25 GMT</pubDate></item><item><title><![CDATA[Reply to Überschriebene Funktion im Basiskonstruktor aufrufen on Sun, 04 Nov 2012 22:06:43 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also zunächst Mal müsste foo virtual sein, damit das ein polymorpher Aufruf ist.</p>
<p>Dann aber sind Konstruktoren so eine Sache für sich. Im constructor von A ist B noch nicht vollständig erstellt bzw. der constructor-Aufruf von A bezieht sich rein auf die A-Klasse und ignoriert den eigentlichen Typ des Objektes.</p>
<p>Kurz und gut, im constructor von A kannst Du keine polymorphe Funktion aufrufen, die erst in B definiert ist. Dafür musst Du leider einen anderen Weg wählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2267480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2267480</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 04 Nov 2012 22:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Überschriebene Funktion im Basiskonstruktor aufrufen on Sun, 04 Nov 2012 22:12:40 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22559">@Eisflamme</a>: Danke für die schnelle Antwort. Irgendwie hatte ich das anders in Erinnerung aber wie gesagt sind meine C++ Tage auch schon etwas her.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2267482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2267482</guid><dc:creator><![CDATA[Farbauti]]></dc:creator><pubDate>Sun, 04 Nov 2012 22:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Überschriebene Funktion im Basiskonstruktor aufrufen on Sun, 04 Nov 2012 23:00:10 GMT]]></title><description><![CDATA[<p>Farbauti schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22559">@Eisflamme</a>: Danke für die schnelle Antwort. Irgendwie hatte ich das anders in Erinnerung aber wie gesagt sind meine C++ Tage auch schon etwas her.</p>
</blockquote>
<p>Hier eine kurze Bestätigung der Aussage von Eisflamme:<br />
<a href="http://stackoverflow.com/questions/496440/c-virtual-function-from-constructor" rel="nofollow">http://stackoverflow.com/questions/496440/c-virtual-function-from-constructor</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2267494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2267494</guid><dc:creator><![CDATA[Confirm]]></dc:creator><pubDate>Sun, 04 Nov 2012 23:00:10 GMT</pubDate></item></channel></rss>