<?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 greift nicht bei Vererbung?]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class A
{
public:
	void foo(int) {cout &lt;&lt; &quot;A::foo&quot;;}
};

class B
{
public:
	void foo(string) {cout &lt;&lt; &quot;B::foo&quot;;}
};

class C : public A, public B
{
};

int main() {
	C c;
	c.foo(10);
	c.foo(&quot;hi&quot;);
	return 0;
}
</code></pre>
<p>In <code>c.foo(10);</code> wird wegen Uneindeutigkeit gemeckert, weil A::foo und B::foo in Frage kommen. Sind die Compiler hier nur doof oder gibt es einen triftigen Grund, wieso das nicht eindutig zugewiesen werden kann? Wenn der Grund eine Regel im Standard ist, was spräche dann dagegen die Überladung zur Auflösung der Uneindeutigkeit zu nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337077/methodenüberladung-greift-nicht-bei-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 17:00:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337077.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Mar 2016 15:57:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenüberladung greift nicht bei Vererbung? on Sun, 06 Mar 2016 15:58:28 GMT]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class A
{
public:
	void foo(int) {cout &lt;&lt; &quot;A::foo&quot;;}
};

class B
{
public:
	void foo(string) {cout &lt;&lt; &quot;B::foo&quot;;}
};

class C : public A, public B
{
};

int main() {
	C c;
	c.foo(10);
	c.foo(&quot;hi&quot;);
	return 0;
}
</code></pre>
<p>In <code>c.foo(10);</code> wird wegen Uneindeutigkeit gemeckert, weil A::foo und B::foo in Frage kommen. Sind die Compiler hier nur doof oder gibt es einen triftigen Grund, wieso das nicht eindutig zugewiesen werden kann? Wenn der Grund eine Regel im Standard ist, was spräche dann dagegen die Überladung zur Auflösung der Uneindeutigkeit zu nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489519</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 06 Mar 2016 15:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung greift nicht bei Vererbung? on Sun, 06 Mar 2016 17:08:04 GMT]]></title><description><![CDATA[<p>Siehe <a href="http://eel.is/c++draft/class.member.lookup#6" rel="nofollow">[class.member.lookup]/(6.2)</a>. Bjarne hat es <a href="http://www.stroustrup.com/bs_faq2.html" rel="nofollow">selbst begründet</a>:</p>
<blockquote>
<p>In C++, there is no overloading across scopes - derived class scopes are not an exception to this general rule. (See D&amp;E or TC++PL3 for details).</p>
</blockquote>
<p>Nimm einfach eine <code>using</code> declaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489526</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 06 Mar 2016 17:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung greift nicht bei Vererbung? on Sun, 06 Mar 2016 18:23:43 GMT]]></title><description><![CDATA[<p>Okay, danke <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/2489534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489534</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 06 Mar 2016 18:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung greift nicht bei Vererbung? on Mon, 07 Mar 2016 14:43:29 GMT]]></title><description><![CDATA[<p>Namensauflösung ist schon interessant. Ich habe das erst später richtig verstanden, wann der Compiler wo guckt. Scopes werden immer von innen nach außen durchsucht. Sobald aber etwas gefunden wurde, geht die Suche <em>nicht</em> mehr mit dem nächst höheren Scope weiter.</p>
<p>Und dann gibt es noch das praktische Koenig-Lookup. Das läuft quasi fast immer zusätzlich.</p>
<p>Man sollte auch wissen, dass using-Direktiven ( <code>using namespace soundso</code> ) ganz anders funktionieren als using-Deklarationen. using-Deklarationen führen Namen in dem Scope ein, wo die Deklarationen auftauchen. Bei using-Direktiven ist das nicht unbedingt der Fall. Die Namen aus <code>soundso</code> werden im &quot;lokalsten&quot; Namensraum injiziert, der sowohl den mit der using-Deklaration als auch <code>soundso</code> umfasst. Und das kann auch zu Mehrdeutigkeiten führen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489589</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 07 Mar 2016 14:43:29 GMT</pubDate></item></channel></rss>