<?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[Frage zu rein-virtuellen Methoden]]></title><description><![CDATA[<p>Mal angenommen, ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class A
{
public:
    virtual void pure() = 0;
};
</code></pre>
<p>Dann muss ich <code>pure</code> in allen abgeleiteten Klassen (re)imlementieren.<br />
Wenn ich nun eine &quot;zweite Basis Klasse&quot; unter A erstellen moechte von dir ich Instanzen erlauben moechte, z.B.</p>
<pre><code class="language-cpp">class B : public A
{
public:
    void pure() {}
};
</code></pre>
<p>muss ich pure zwar fuer B implementieren, aber nicht mehr fuer Kindklassen unter B:</p>
<pre><code class="language-cpp">class C : public B
{
public:
    //void pure() {} nicht noetig
};
</code></pre>
<p>Wie kann ich die erneute Implementierung von <code>pure()</code> erzwingen und dennoch Instanzen von B erlauben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309107/frage-zu-rein-virtuellen-methoden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 12:09:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309107.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Oct 2012 13:45:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu rein-virtuellen Methoden on Sun, 14 Oct 2012 13:45:46 GMT]]></title><description><![CDATA[<p>Mal angenommen, ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class A
{
public:
    virtual void pure() = 0;
};
</code></pre>
<p>Dann muss ich <code>pure</code> in allen abgeleiteten Klassen (re)imlementieren.<br />
Wenn ich nun eine &quot;zweite Basis Klasse&quot; unter A erstellen moechte von dir ich Instanzen erlauben moechte, z.B.</p>
<pre><code class="language-cpp">class B : public A
{
public:
    void pure() {}
};
</code></pre>
<p>muss ich pure zwar fuer B implementieren, aber nicht mehr fuer Kindklassen unter B:</p>
<pre><code class="language-cpp">class C : public B
{
public:
    //void pure() {} nicht noetig
};
</code></pre>
<p>Wie kann ich die erneute Implementierung von <code>pure()</code> erzwingen und dennoch Instanzen von B erlauben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260288</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Sun, 14 Oct 2012 13:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu rein-virtuellen Methoden on Mon, 15 Oct 2012 05:53:51 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Dann muss ich <code>pure</code> in allen abgeleiteten Klassen (re)imlementieren.</p>
</blockquote>
<p>Etwas unklar ausgedrückt. Du musst natürlich pure nicht in <em>jeder</em> Klasse implementieren, die von A erbt. Genauer gesagt: man darf von einer Klasse, die direkt oder indirekt von A erbt, nur dann ein Objekt erstellen, wenn die Klasse oder eine der Elternklassen (die direkt oder indirekt von A erben), pure implementiert. <em>Re</em>implementieren musst du garnichts.</p>
<blockquote>
<p>Wie kann ich die erneute Implementierung von <code>pure()</code> erzwingen und dennoch Instanzen von B erlauben?</p>
</blockquote>
<p>Garnicht. Die ganz strengen Jünger der Objektorientierung machen sowieso alle Klassen, die als Basisklassen gedacht sind, pure virtual. In deinem Fall würde man dann eine Klasse BBase erstellen, die pure <em>nicht</em> implementiert und die zum ableiten gedacht ist, und eine Klasse B, die von BBase ableitet und pure implementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260291</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 05:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu rein-virtuellen Methoden on Sun, 14 Oct 2012 14:13:16 GMT]]></title><description><![CDATA[<p>Bitte auch bedenken: Je mehr Kontext du gibst, desdo größer ist die Wahrscheinlichkeit, dass irgendjemand hier dir eine Lösung zeigt, auf die du noch gar nicht gekommen bist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260293</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 14 Oct 2012 14:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu rein-virtuellen Methoden on Sun, 14 Oct 2012 15:56:28 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Dann muss ich <code>pure</code> in allen abgeleiteten Klassen (re)imlementieren.</p>
</blockquote>
<p>Etwas unklar ausgedrückt. Du musst natürlich pure nicht in <em>jeder</em> Klasse implementieren, die von A erbt. Genauer gesagt: man darf von einer Klasse, die direkt oder indirekt von A erbt, nur dann ein Objekt erstellen, wenn die Klasse oder eine der Elternklassen (die direkt oder indirekt von A erben), pure implementiert. <em>Re</em>implementieren musst du garnichts.</p>
</blockquote>
<p>Mit <em>re</em>implementieren bezog ich mich auf den spezielleren Fall, dass man reinvirtuelle Methoden in der abstrakten Basisklasse auch implementieren darf, aber sie in der abgeleiteten Klasse trotzdem reimplementieren muss, wenn man Instanzen der abgeleiteten Klasse erlauben moechte.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<blockquote>
<p>Wie kann ich die erneute Implementierung von <code>pure()</code> erzwingen und dennoch Instanzen von B erlauben?</p>
</blockquote>
<p>Garnicht. Die ganz strengen Jünger der Objektorientierung machen sowieso alle Klassen,<br />
die als Basisklassen gedacht sind, private.</p>
</blockquote>
<p>Verstehe nicht, was du damit meinst ...</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>In deinem Fall würde man dann eine Klasse BBase erstellen, die pure <em>nicht</em> implementiert und die zum ableiten gedacht ist, und eine Klasse B, die von BBase ableitet und pure implementiert.</p>
</blockquote>
<p>Gute Loesung.<br />
Bleibt dann nur ein kleines Problem uebrig: Man darf trotzdem noch von B ableiten und kann dann damit das implementieren von <code>pure</code> umgehen, aber ja, damit kann ich leben.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260329</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Sun, 14 Oct 2012 15:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu rein-virtuellen Methoden on Mon, 15 Oct 2012 05:56:05 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Garnicht. Die ganz strengen Jünger der Objektorientierung machen sowieso alle Klassen,<br />
die als Basisklassen gedacht sind, private.</p>
</blockquote>
<p>Verstehe nicht, was du damit meinst ...</p>
</blockquote>
<p>Sorry, war wohl nicht ganz wach. Gemeint ist nicht private sondern abstrakt. Habs geändert.</p>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Bleibt dann nur ein kleines Problem uebrig: Man darf trotzdem noch von B ableiten</p>
</blockquote>
<p>Technisch gesehen ja. Aber gegen Bösartigkeit kann man sich nunmal nicht schützen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2260518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260518</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 15 Oct 2012 05:56:05 GMT</pubDate></item></channel></rss>