<?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[Rein virtuelle Funktionen in Basisklasse aufrufen]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Basisklasse, dessen Erben Doubles erhalten und damit irgendetwas machen sollen.</p>
<p>Die Basisklasse soll nun einen Filter enthalten, der für alle Erben gleich funktionieren soll. Die Basisklasse soll nicht instanziierbar sein.</p>
<pre><code>class Base {
public:
  void writeDouble (double number) {
    if (!filteredOut(number)) {
      transferDouble(number);
    }
  }

protected:
  virtual void transferDouble (double number) = 0;

private:
  bool filteredOut(double number) {
    // Pipapo
  }
}
</code></pre>
<p>Das funktioniert nun so leider nicht. &quot;transferDouble&quot; kann nur als normale virtuelle Methode implementiert werden, mit dem Hinweis, dass Erben die Klasse überschreiben dürfen. Ich möchte aber, dass der Programmierer gezwungen ist, die Methode &quot;transferDouble&quot; zu überschreiben. Außerdem wäre die Basisklasse ansonsten instanziierbar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Geht das?</p>
<p>Ich hoffe man kann verstehen was ich möchte.</p>
<p>Vielen vielen Dank für Antworten.</p>
<p>Grüße,<br />
anjohn</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317768/rein-virtuelle-funktionen-in-basisklasse-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 18:49:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317768.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Jun 2013 07:05:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 07:13:40 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Basisklasse, dessen Erben Doubles erhalten und damit irgendetwas machen sollen.</p>
<p>Die Basisklasse soll nun einen Filter enthalten, der für alle Erben gleich funktionieren soll. Die Basisklasse soll nicht instanziierbar sein.</p>
<pre><code>class Base {
public:
  void writeDouble (double number) {
    if (!filteredOut(number)) {
      transferDouble(number);
    }
  }

protected:
  virtual void transferDouble (double number) = 0;

private:
  bool filteredOut(double number) {
    // Pipapo
  }
}
</code></pre>
<p>Das funktioniert nun so leider nicht. &quot;transferDouble&quot; kann nur als normale virtuelle Methode implementiert werden, mit dem Hinweis, dass Erben die Klasse überschreiben dürfen. Ich möchte aber, dass der Programmierer gezwungen ist, die Methode &quot;transferDouble&quot; zu überschreiben. Außerdem wäre die Basisklasse ansonsten instanziierbar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Geht das?</p>
<p>Ich hoffe man kann verstehen was ich möchte.</p>
<p>Vielen vielen Dank für Antworten.</p>
<p>Grüße,<br />
anjohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332707</guid><dc:creator><![CDATA[anjohn]]></dc:creator><pubDate>Thu, 20 Jun 2013 07:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 08:02:08 GMT]]></title><description><![CDATA[<p>Oh tut mir leid. Das funktioniert doch. Ich hatte die Erben noch nicht fertig implementiert und bekam einen Fehler bezüglich der Basisklasse.</p>
<p>Ich dachte darauf, dass die Basisklasse nicht übersetzt werden konnte und habe alles neu gemacht.</p>
<p>Anscheinend darf man in Klassen mit reinen virtuellen Funktionen diese auch benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332717</guid><dc:creator><![CDATA[anjohn]]></dc:creator><pubDate>Thu, 20 Jun 2013 08:02:08 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 08:08:13 GMT]]></title><description><![CDATA[<p>Ausserdem: Falsches Forum, nur falls du es noch nicht bemerkt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332720</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 20 Jun 2013 08:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 11:15:23 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f58" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332757</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 20 Jun 2013 11:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 14:05:43 GMT]]></title><description><![CDATA[<p>Vielleicht wäre das Template-Method Pattern was für dich.<br />
Damit ist der User gezwungen deine Klasse zu überschreiben, bekommt aber auch zwingend deine Funktionalität mit.</p>
<pre><code>class Base
{
    void bar()
    {
        cout &lt;&lt; &quot;Manueeel&quot; &lt;&lt; endl;
        foo();
        cout &lt;&lt; &quot;Roflcopter&quot; &lt;&lt; endl;
    }

    virtual void foo() = 0;
};

class Derive
{
    virtual void foo()
    {
        cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; endl;
    }
};
</code></pre>
<p>So als Minimalbeispiel, du verstehst?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332811</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:05:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 14:10:38 GMT]]></title><description><![CDATA[<p>Das nennt sich NVI Idiom.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332812</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:10:38 GMT</pubDate></item><item><title><![CDATA[Reply to Rein virtuelle Funktionen in Basisklasse aufrufen on Thu, 20 Jun 2013 14:15:31 GMT]]></title><description><![CDATA[<p>Laut <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface" rel="nofollow">More C++ Idioms</a> ist's dasselbe.</p>
<p>Namen sind eh Schall und Rauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332816</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 20 Jun 2013 14:15:31 GMT</pubDate></item></channel></rss>