<?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[Methodenüberladung in Klassenhierarchien?]]></title><description><![CDATA[<p>Mir ist nicht so ganz klar, wieso folgender Code eine Fehlermeldung erzeugt:</p>
<pre><code>struct A
{
      void f() {}
};

struct B: public A
{
      void f(int) {}
};

int main()
{
   B().f(); // Fehler
}
</code></pre>
<pre><code>error: no matching function for call to 'B::f()'
</code></pre>
<p>Erwarten würde ich, dass f() aus der Oberklasse aufgerufen wird.<br />
Was ist der Grund, dass dem nicht so ist? Wird die Methode f() in einer ausgefallenen Art und Weise von f(int) überdeckt?</p>
<p>Danke für Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323115/methodenüberladung-in-klassenhierarchien</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 10:24:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323115.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Jan 2014 16:35:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenüberladung in Klassenhierarchien? on Sat, 18 Jan 2014 16:35:38 GMT]]></title><description><![CDATA[<p>Mir ist nicht so ganz klar, wieso folgender Code eine Fehlermeldung erzeugt:</p>
<pre><code>struct A
{
      void f() {}
};

struct B: public A
{
      void f(int) {}
};

int main()
{
   B().f(); // Fehler
}
</code></pre>
<pre><code>error: no matching function for call to 'B::f()'
</code></pre>
<p>Erwarten würde ich, dass f() aus der Oberklasse aufgerufen wird.<br />
Was ist der Grund, dass dem nicht so ist? Wird die Methode f() in einer ausgefallenen Art und Weise von f(int) überdeckt?</p>
<p>Danke für Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378058</guid><dc:creator><![CDATA[mortified_penguin]]></dc:creator><pubDate>Sat, 18 Jan 2014 16:35:38 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Klassenhierarchien? on Sat, 18 Jan 2014 16:44:54 GMT]]></title><description><![CDATA[<p>mortified_penguin schrieb:</p>
<blockquote>
<p>Wird die Methode f() in einer ausgefallenen Art und Weise von f(int) überdeckt?</p>
</blockquote>
<p>Genau das. Eine Methode mit dem gleichen Namen verdeckt eventuelle geerbte Methoden. Mit using kannst du sie aber wieder sichtbar machen:</p>
<pre><code>struct B: public A
{
      using A::f;
      void f(int) {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2378062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378062</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 18 Jan 2014 16:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Klassenhierarchien? on Sat, 18 Jan 2014 16:45:22 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass f(int) die geerbte Methode f() überdeckt. f(int) und f() sind ein einem unterschiedlichen Scope. C++ get Scope für Scope durch bis ein passender Name gefunden wird. In deinem Fall fängt er im Scope von B an und findet dort den Namen f. Die einzige Methode mit dem Namen f in diesem Scope ist aber f(), d.h. die Version ohne int Parameter.</p>
<p>Eine mögliche Lösung ist</p>
<pre><code>using A::f;
</code></pre>
<p>in B zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378063</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 18 Jan 2014 16:45:22 GMT</pubDate></item></channel></rss>