<?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[Funktion in Unterklasse &amp;quot;löschen&amp;quot;]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>angenommen man hat folgenden Zusammenhang</p>
<pre><code class="language-cpp">class A
{
  public:
    void foo() { cout &lt;&lt; &quot;A&quot; &lt;&lt; endl;}
};

class B : public A
{

  public:
   void foo() {};
};
</code></pre>
<p>und möcchte in der Unterklasse B die Methode foo() nicht mehr zur Verfügung stellen, dann fällt mir bisher nur die obige Lösung ein, schöne wäre aber so etwas wie</p>
<pre><code class="language-cpp">void foo() = delete ;
</code></pre>
<p>was aber an dieser Stelle leider nicht möglich ist. Gibt es sonst noch elegante Möglichkeiten eine eigentlich geerbte Funktion zu löschen/verbergen?</p>
<p>Gruß <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/topic/305341/funktion-in-unterklasse-quot-löschen-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 01:15:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305341.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Jun 2012 16:41:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion in Unterklasse &amp;quot;löschen&amp;quot; on Tue, 26 Jun 2012 16:41:46 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>angenommen man hat folgenden Zusammenhang</p>
<pre><code class="language-cpp">class A
{
  public:
    void foo() { cout &lt;&lt; &quot;A&quot; &lt;&lt; endl;}
};

class B : public A
{

  public:
   void foo() {};
};
</code></pre>
<p>und möcchte in der Unterklasse B die Methode foo() nicht mehr zur Verfügung stellen, dann fällt mir bisher nur die obige Lösung ein, schöne wäre aber so etwas wie</p>
<pre><code class="language-cpp">void foo() = delete ;
</code></pre>
<p>was aber an dieser Stelle leider nicht möglich ist. Gibt es sonst noch elegante Möglichkeiten eine eigentlich geerbte Funktion zu löschen/verbergen?</p>
<p>Gruß <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/2227460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227460</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Tue, 26 Jun 2012 16:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion in Unterklasse &amp;quot;löschen&amp;quot; on Tue, 26 Jun 2012 16:47:54 GMT]]></title><description><![CDATA[<p>1. Design nochmal ueberdenken. In den meisten Fallen ist das naemlich nicht sinnvoll, da dadurch die 'is-a' Beziehung verletzt wird.<br />
2. Falls du es wirklich so machen willst, dann kannst du einfach den Methodenrumpf leer lassen, das heisst die Methode macht dann nichts. Oder du wirfst eine Exception, wenn die Methode aufgerufen wird.</p>
<p>Sind beides unschoene Loesungen aber soweit ich weiss gibt es nichts besseres. Deswegen wie schon in Punkt1 geschrieben: Design nochmals ueberdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227463</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Tue, 26 Jun 2012 16:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion in Unterklasse &amp;quot;löschen&amp;quot; on Tue, 26 Jun 2012 17:13:25 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void foo() = delete;
</code></pre>
</blockquote>
<p>Genau das geht mit C++11 <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="🙂"
    /> (siehe <a href="http://en.wikipedia.org/wiki/C%2B%2B11#Explicitly_defaulted_and_deleted_special_member_functions" rel="nofollow">Wikipedia</a>)</p>
<p>Für den alten Standard fällt mir nur ein, dass man die geerbte Funktion private deklariert und nirgends definiert...</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A
{
	void foo()
	{
		std::cout &lt;&lt; &quot;foo\n&quot;;
	}
};

class B : public A
{
	void foo();

	// EDIT: hier könnte man auch schreiben
	// A::foo;
	// wie in Hacker's Beitrag unten
	// Beide Schreibweisen führen bei Aufruf von B::foo() zum gleichen Fehler :-)
};

int main()
{
	A a;
	B b;

	a.foo();
	b.foo();

	return 0;
}
</code></pre>
<p>Visual C++ meldet hier bei b.foo():<br />
error C2248: &quot;B::foo&quot;: Kein Zugriff auf private Member, dessen Deklaration in der B-Klasse erfolgte.</p>
<p>Sollte also in etwa deinem Ziel entsprechen.</p>
<p>PS.: Hacker, ich bin kein Dieb, ich habe deinen Namen immerhin erwähnt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227466</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Tue, 26 Jun 2012 17:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion in Unterklasse &amp;quot;löschen&amp;quot; on Tue, 26 Jun 2012 16:58:09 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Gibt es sonst noch elegante Möglichkeiten eine eigentlich geerbte Funktion zu löschen/verbergen?</p>
</blockquote>
<pre><code class="language-cpp">class A
{
  public:
    void foo() {}
};

class B : public A
{

  private:
   A::foo;
};
</code></pre>
<p>Bringt aber natürlich nichts, wenn du Basisklassenzeiger/referenzen verwendest; Dann hängt alles von <code>A</code> ab.</p>
<p>Edit: Drako du Dieb <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227467</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 26 Jun 2012 16:58:09 GMT</pubDate></item></channel></rss>