<?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[Virtuelle Funktion in Basisklasse aufrufen]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">class A
{
public:
	virtual void Stuff() = 0;
	A()
	{
		Stuff();
	}
};

class B: public A
{
public:
	void Stuff()
	{
		do_something();
	}
};

int main()
{
	A* obj = new B;

	return 0;
}
</code></pre>
<p>Wie erreiche ich das im A-Konstruktor B::Stuff aufgerufen wird?<br />
Vielen Dank für eure Antworten, x4r3dn</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287958/virtuelle-funktion-in-basisklasse-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 05:04:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287958.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Jun 2011 19:03:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 19:03:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">class A
{
public:
	virtual void Stuff() = 0;
	A()
	{
		Stuff();
	}
};

class B: public A
{
public:
	void Stuff()
	{
		do_something();
	}
};

int main()
{
	A* obj = new B;

	return 0;
}
</code></pre>
<p>Wie erreiche ich das im A-Konstruktor B::Stuff aufgerufen wird?<br />
Vielen Dank für eure Antworten, x4r3dn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074879</guid><dc:creator><![CDATA[x4rd3n]]></dc:creator><pubDate>Tue, 07 Jun 2011 19:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 19:07:29 GMT]]></title><description><![CDATA[<p>Gar nicht. Verpass eben B einen passenden Konstruktor der dies tut. Oder schildere uns, was du erreichen willst und nicht das wie, dann gibt es bestimmt noch bessere Vorschläge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074881</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 07 Jun 2011 19:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 19:07:39 GMT]]></title><description><![CDATA[<p>Im Konstruktor: Gar nicht. Und normalerweise stellt es sich immer als Desingfehler heraus, wenn jemand meint das nötig zu haben.</p>
<p>Im Konstruktor von A hast du nur ein A-(Teil)Objekt und etwas nicht-initialisierten Speicher, in dem der Rest von B untergebracht werden könnte. Aber die Member von B werden erst nach der Basisklasse initialisiert, so daß du mit dem B-Anteil der Klasse auf keinen Fall etwas sinnvolles anfangen kannst.</p>
<p>PS: Für den Destruktor gilt das selbe Prinzip analog - da werden die B-Anteile bereits freigegeben, bevor der A-Anteil zerstört wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074882</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Jun 2011 19:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 19:16:13 GMT]]></title><description><![CDATA[<p>Wozu benötigst du das? Wenn man <code>B</code> instanziert, wird erst der Konstruktor von <code>A</code> aufgerufen und dann der von <code>B</code> . Wenn nun im CTor von <code>A</code> ein Funktionsaufruf einer Funktion die sich auf den Konstruktor von <code>B</code> verlässt, klingt das schon nicht ganz in Ordnung, oder? Wie CStoll schon gesagt hat: Wahrscheinlich ein Designfehler<br />
PS: Steht relativ am Anfang von &quot;Effektiv C++&quot;:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074888</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 07 Jun 2011 19:16:13 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 19:19:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Gar nicht. Verpass eben B einen passenden Konstruktor der dies tut. Oder schildere uns, was du erreichen willst und nicht das wie, dann gibt es bestimmt noch bessere Vorschläge.</p>
</blockquote>
<p>Natürlich kann ich den Teil auch im B-Konstruktor laufen lassen, so funktioniert mein Code im Moment auch.</p>
<p>Ich will damit folgendes erreichen: Ich leite mehrere Klassen von A ab, und will die Funktion nicht jedes mal erneut in deren Konstruktoren aufrufen, daher hatte ich die Idee den Code in den A-Konstruktor zu verlagern, der ja von allen abgeleiteten Klassen aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074890</guid><dc:creator><![CDATA[x4rd3n]]></dc:creator><pubDate>Tue, 07 Jun 2011 19:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Funktion in Basisklasse aufrufen on Tue, 07 Jun 2011 22:38:44 GMT]]></title><description><![CDATA[<p>Wenn es eine virtuelle Funktion werden soll, hat doch sowieso jede abgeleitete Klasse ihre eigene Version davon - da ist es doch kein Problem, die nötigen Arbeiten direkt im jeweiligen Konstruktor zu erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2074986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2074986</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Jun 2011 22:38:44 GMT</pubDate></item></channel></rss>