<?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[vererbt und überladen]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">class A
{
public:
	virtual int get(int x)
	{
		return get(x, 1);
	}
	virtual int get(int x, int y)
	{
		return y;
	}
};

class B : public A
{
public:
	virtual int get(int x)
	{
		return get(x, 2);
	}
};
</code></pre>
<p>Erwartet hätte ich, dass B::get einfach A::get aufrufen kann. Laut Compiler geht das aber nicht, get(int, int) ist nicht bekannt. An der Stelle könnte ich mir per return A::get(x, 2); behelfen. Was ich als tragischer erachte ist, dass das hier auch nicht mehr geht:</p>
<pre><code class="language-cpp">B *b = new B();
b-&gt;get(2, 3);
</code></pre>
<p>Warum wird get(int, int) total ausgeblendet? Beide Funktionen sind ja an sich eigenständige Funktionen in der Klasse und somit unabhängig voneinander?!<br />
Anschließend hatte ich das ganze in C# getestet und da funktioniert es so wie erwartet.</p>
<p>Compilerfehler oder Sprachfeature?</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296349/vererbt-und-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 00:08:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296349.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Dec 2011 01:53:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vererbt und überladen on Sat, 03 Dec 2011 01:53:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">class A
{
public:
	virtual int get(int x)
	{
		return get(x, 1);
	}
	virtual int get(int x, int y)
	{
		return y;
	}
};

class B : public A
{
public:
	virtual int get(int x)
	{
		return get(x, 2);
	}
};
</code></pre>
<p>Erwartet hätte ich, dass B::get einfach A::get aufrufen kann. Laut Compiler geht das aber nicht, get(int, int) ist nicht bekannt. An der Stelle könnte ich mir per return A::get(x, 2); behelfen. Was ich als tragischer erachte ist, dass das hier auch nicht mehr geht:</p>
<pre><code class="language-cpp">B *b = new B();
b-&gt;get(2, 3);
</code></pre>
<p>Warum wird get(int, int) total ausgeblendet? Beide Funktionen sind ja an sich eigenständige Funktionen in der Klasse und somit unabhängig voneinander?!<br />
Anschließend hatte ich das ganze in C# getestet und da funktioniert es so wie erwartet.</p>
<p>Compilerfehler oder Sprachfeature?</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152154</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Sat, 03 Dec 2011 01:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to vererbt und überladen on Sat, 03 Dec 2011 02:08:59 GMT]]></title><description><![CDATA[<p>get(int,int) wird überdeckt (<em>Überdeckung</em>, neben <em>Überladung</em> und <em>Überschreibung</em>). Mit einer using-Deklaration kann die Funktion wieder in den Scope von B aufgenommen werden.</p>
<pre><code class="language-cpp">class B : public A
{
public:
    using A::get;
    virtual int get(int x)
    {
        return get(x, 2);
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2152158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152158</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 03 Dec 2011 02:08:59 GMT</pubDate></item><item><title><![CDATA[Reply to vererbt und überladen on Sat, 03 Dec 2011 02:08:42 GMT]]></title><description><![CDATA[<p>die erneute definition der Funktion überschreibt den ganzen Namen, unabhängig vom Typ der Funktion.<br />
(ähnlich wie in:</p>
<pre><code class="language-cpp">int a = 5;
{
    double a = 1.5;
}
</code></pre>
<p>)</p>
<p>Du musst folgendes schreiben:</p>
<pre><code class="language-cpp">class B : public A
{
public:
    using A::get;
    // ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2152159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152159</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sat, 03 Dec 2011 02:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to vererbt und überladen on Sat, 03 Dec 2011 02:22:55 GMT]]></title><description><![CDATA[<p>Deklarationen in inneren Scopes verdecken Deklarationen gleichen Namens in äußeren Scopes. Basisklassen sind in Hinblick auf die Namensauflösung äußere Scopes. Die Deklaration von get in B verdeckt folglich <em>beide</em> get-Deklarationen aus A. Um auf diese zugreifen zu können, muss ein qualifizierter Bezeichner (also A::get) verwendet werden, oder aber die Deklarationen müssen in der Klasse wiederholt werden (per using).</p>
<pre><code class="language-cpp">B *b = new B();
b-&gt;get(2, 3); // Fehler
b-&gt;A::get(2, 3); //ok
((A*)b)-&gt;get(2, 3); // ok
((A*)b)-&gt;A::get(2, 3); // nat. auch ok
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2152162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152162</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 03 Dec 2011 02:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to vererbt und überladen on Sat, 03 Dec 2011 12:12:40 GMT]]></title><description><![CDATA[<p>ah sehr gut, meine Rettung <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="😃"
    /> danke euch</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152261</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Sat, 03 Dec 2011 12:12:40 GMT</pubDate></item></channel></rss>