<?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[Abstrakte Methoden]]></title><description><![CDATA[<p>Hi, zurzeit versuche ich eine abstracke Methode zu implementieren. So schaut das aus:</p>
<pre><code class="language-cpp">class a {
  public:
    a() {
      do_stuff();
    }
  protected:
    virtual void do_stuff() = 0;
};

class b: public a {
  public:
    b() :
      a() {
    }
  protected:
    virtual void do_stuff() {
      // do useful stuff
    }
};

int main() {
  b obj;
}
</code></pre>
<p>Wenn ich das kompiliere erhalte ich diese Fehlermeldung:</p>
<pre><code>test.cpp: In constructor »a::a()«:
test.cpp:4:16: Warnung: abstract virtual »virtual void a::do_stuff()« called from constructor
</code></pre>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266850/abstrakte-methoden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 19:55:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266850.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 May 2010 12:45:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 12:45:44 GMT]]></title><description><![CDATA[<p>Hi, zurzeit versuche ich eine abstracke Methode zu implementieren. So schaut das aus:</p>
<pre><code class="language-cpp">class a {
  public:
    a() {
      do_stuff();
    }
  protected:
    virtual void do_stuff() = 0;
};

class b: public a {
  public:
    b() :
      a() {
    }
  protected:
    virtual void do_stuff() {
      // do useful stuff
    }
};

int main() {
  b obj;
}
</code></pre>
<p>Wenn ich das kompiliere erhalte ich diese Fehlermeldung:</p>
<pre><code>test.cpp: In constructor »a::a()«:
test.cpp:4:16: Warnung: abstract virtual »virtual void a::do_stuff()« called from constructor
</code></pre>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897514</guid><dc:creator><![CDATA[x4rd3n]]></dc:creator><pubDate>Sat, 15 May 2010 12:45:44 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 12:49:07 GMT]]></title><description><![CDATA[<p>x4rd3n schrieb:</p>
<blockquote>
<p>Hi, zurzeit versuche ich eine abstracke Methode zu implementieren. So schaut das aus:</p>
<pre><code class="language-cpp">class a {
  public:
    a() {
      do_stuff();
    }
  protected:
    virtual void do_stuff() = 0;
};

class b: public a {
  public:
    b() :
      a() {
    }
  protected:
    virtual void do_stuff() {
      // do useful stuff
    }
};

int main() {
  b obj;
}
</code></pre>
<p>Wenn ich das kompiliere erhalte ich diese Fehlermeldung:</p>
<pre><code>test.cpp: In constructor »a::a()«:
test.cpp:4:16: Warnung: abstract virtual »virtual void a::do_stuff()« called from constructor
</code></pre>
<p>Was mache ich falsch?</p>
</blockquote>
<p>Steht doch in der Fehlermeldung:</p>
<pre><code class="language-cpp">class a {
  public:
    a() {
      do_stuff(); // &lt;--- Warnung: abstract virtual »virtual void a::do_stuff()« called from constructor
    }
  protected:
    virtual void do_stuff() = 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1897515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897515</guid><dc:creator><![CDATA[jkhk]]></dc:creator><pubDate>Sat, 15 May 2010 12:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 12:51:18 GMT]]></title><description><![CDATA[<p>jo schon klar <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="🙂"
    /> Nur ist gewünscht das die methode b::do_stuff() dann ausgeführt wird wenn ein Objekt der Klasse b vorliegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897517</guid><dc:creator><![CDATA[x4rd3n]]></dc:creator><pubDate>Sat, 15 May 2010 12:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 12:52:42 GMT]]></title><description><![CDATA[<p>Virtuelle Funktionen sollen nicht in im Konstruktor aufgerufen werde, weil die definitive Funktion noch nicht bekannt sein könnte, weil die Objekt noch nicht korrekt erzeugt wurden (und die vtable noch nicht besteht).</p>
<p>Du wirst da wohl um eine Funktion, welche du danach aufrufst nicht herum kommen (oder ganz das Design anpassen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897519</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 15 May 2010 12:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 12:56:15 GMT]]></title><description><![CDATA[<p>Ok, klappt, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897522</guid><dc:creator><![CDATA[x4rd3n]]></dc:creator><pubDate>Sat, 15 May 2010 12:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Methoden on Sat, 15 May 2010 13:08:02 GMT]]></title><description><![CDATA[<p>Warum ruft der Konstruktor der abgeleiteten Klasse nicht eine qualifizierte Version von <code>do_stuff()</code> auf? Der Aufruf muss nicht virtuell erfolgen, wenn die genaue Klasse bekannt ist. Durch die Angabe der Klasse kann die Funktion statisch gebunden werden.</p>
<pre><code class="language-cpp">b::b()
: a()
{
    b::do_stuff();
}
</code></pre>
<p>Die Alternative besteht darin, eine Factory-Funktion zur Initialisierung zu haben, die nach der eigentlichen Konstruktion noch zusätzliche Methoden aufruft.</p>
<pre><code class="language-cpp">std::auto_ptr&lt;a&gt; create_b()
{
    std::auto_ptr&lt;a&gt; result(new b);
    result-&gt;do_stuff();

    return result;
}
</code></pre>
<p>Je nachdem auch mit Wertsemantik statt <code>auto_ptr</code> , wenn das erwünscht ist.</p>
<pre><code class="language-cpp">b create_b()
{
    b result;
    result.do_stuff();

    return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1897526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897526</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 May 2010 13:08:02 GMT</pubDate></item></channel></rss>