<?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 Methoden und Konstruktoren]]></title><description><![CDATA[<p>Hi, ich habe eine ähnliche Situation, wie hier dargestellt:</p>
<pre><code class="language-cpp">class A
{
protected:
    virtual void Method() { cout &lt;&lt; &quot;A::Method&quot;; };
public:
    A(const A&amp; source) { Method(); };
}

class B : public A
{
protected:
    virtual void Method() { cout &lt;&lt; &quot;B::Method&quot;; };
public:
    B(const B&amp; source) : A(source) {};
}
</code></pre>
<p>Bei mir wird im Konstruktor leider nicht B::Method() aufgerufen, sondern die von A. Ich hoffe, dass das Minibeispiel korrekt ist. Bei meinen richtigen Klassen ist das zumindest so.</p>
<p>Ist das wirklich so, wie es aussieht, dass im Konstruktor von A wirklich nur Methoden von A benutzt werden, obwohl sie virtual überschrieben sind?? Ich fände es sehr schade, wenn die Polymorphie tatsächlich erst NACH der Konstruktion in Gang kommt. Das wäre ja eine Verletzung gegen objektorientierte Paradigmen -- meiner Meinung nach :). Denn ich habe nun das Problem, dass mein B nicht korrekt initialisiert wird. Teile, die in B::Method() ausgeführt werden, fehlen.</p>
<p>Gibt's da ne nette Lösung??</p>
<p>Viele Grüße und ebensoviel Dank,<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150450/virtuelle-methoden-und-konstruktoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 16:10:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150450.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jun 2006 15:02:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle Methoden und Konstruktoren on Fri, 16 Jun 2006 15:02:38 GMT]]></title><description><![CDATA[<p>Hi, ich habe eine ähnliche Situation, wie hier dargestellt:</p>
<pre><code class="language-cpp">class A
{
protected:
    virtual void Method() { cout &lt;&lt; &quot;A::Method&quot;; };
public:
    A(const A&amp; source) { Method(); };
}

class B : public A
{
protected:
    virtual void Method() { cout &lt;&lt; &quot;B::Method&quot;; };
public:
    B(const B&amp; source) : A(source) {};
}
</code></pre>
<p>Bei mir wird im Konstruktor leider nicht B::Method() aufgerufen, sondern die von A. Ich hoffe, dass das Minibeispiel korrekt ist. Bei meinen richtigen Klassen ist das zumindest so.</p>
<p>Ist das wirklich so, wie es aussieht, dass im Konstruktor von A wirklich nur Methoden von A benutzt werden, obwohl sie virtual überschrieben sind?? Ich fände es sehr schade, wenn die Polymorphie tatsächlich erst NACH der Konstruktion in Gang kommt. Das wäre ja eine Verletzung gegen objektorientierte Paradigmen -- meiner Meinung nach :). Denn ich habe nun das Problem, dass mein B nicht korrekt initialisiert wird. Teile, die in B::Method() ausgeführt werden, fehlen.</p>
<p>Gibt's da ne nette Lösung??</p>
<p>Viele Grüße und ebensoviel Dank,<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078996</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Fri, 16 Jun 2006 15:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden und Konstruktoren on Fri, 16 Jun 2006 15:06:25 GMT]]></title><description><![CDATA[<p>Wenn der Ctor von A ausgeführt wird, dann existiert B ja noch garnicht. Du kannst also keine virtuellen Funktionen in einem Ctor verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078998</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 16 Jun 2006 15:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden und Konstruktoren on Fri, 16 Jun 2006 15:09:44 GMT]]></title><description><![CDATA[<p>Ja, das habe ich mir schon fast gedacht. Aber das halte ich für eine Verletzung der Polymorphie. Ich muss ja jetzt extra irgendwas coden, damit alles vernünftig läuft. Und mir v.a. an zwei Stellen darüber gedanken machen. Schade...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079001</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Fri, 16 Jun 2006 15:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden und Konstruktoren on Fri, 16 Jun 2006 15:22:04 GMT]]></title><description><![CDATA[<p>FelixManke schrieb:</p>
<blockquote>
<p>Aber das halte ich für eine Verletzung der Polymorphie.</p>
</blockquote>
<p>ach was <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>FelixManke schrieb:</p>
<blockquote>
<p>Ich muss ja jetzt extra irgendwas coden, damit alles vernünftig läuft.</p>
</blockquote>
<p>evtl. helfen dir initialiser list weiter oder du musst halt dein Design überdenken.</p>
<p>Was willst du überhaupt mit dem Aufruf der Funktion im Constructor erreichen. Evtl kann man dir dann weiterhelfen <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/1079011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079011</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Fri, 16 Jun 2006 15:22:04 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden und Konstruktoren on Fri, 16 Jun 2006 15:28:40 GMT]]></title><description><![CDATA[<p>Hab mir schon geholfen. Waren in meinem Fall nur 2-3 Zeilen Code in einer Schleife -- also nicht soo wild.</p>
<p>Was ich machen möchte: Hab ne verkettete Template-Liste implementiert und von dieser Liste abgeleitet. Die Liste hat hält die Daten in Node-Objekten und erzeugt diese beim Einfügen -- ist ja logisch. Dazu gibt's ne virtual void Insert(const T&amp; val). Im Copy-Konstruktor iteriere ich durch die Quell-Liste und rufe für jedes Element Insert() auf.</p>
<p>Meine abgeleitete Liste muss in Insert() noch mehr machen und die Daten analysieren. Naja, und ich dachte halt, dass das mit der virtuellen Funktion funktioniert. Hat's aber nciht. Da ich aber die Analyse fast komplett in einer eigenen Methode habe, iteriere ich jetzt halt 2x, einmal im Konstruktor der Basisklasse zum anlegen der Nodes, und danach im Konstruktor der abgeleiteten Klasse und rufe die Analysemethode auf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1079016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1079016</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Fri, 16 Jun 2006 15:28:40 GMT</pubDate></item></channel></rss>