<?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[Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern]]></title><description><![CDATA[<p>Wenn ich folgendes Programm habe:</p>
<pre><code class="language-cpp">class Basis
{
public:

	virtual void Funktion ()
	{
	}
};

class Abgeleitet: public Basis
{
public:

	virtual void Funktion (int i)
	{
	}
};

int main ()
{
	Abgeleitet a;

	a.Funktion ();          //Fehler
	//a.Basis::Funktion (); //So funktioniert es

	return 0;
}
</code></pre>
<p>Warum funktioniert dann der Aufruf in Zeile 23 nicht? Dadurch, daß die Funktionen unterschiedliche Parameter haben, müßte die abgeleitete Klasse doch problemlos auf beide zugreifen können. Aber trotzdem muß ich hier die Basisklasse explizit mit angeben (Zeile 24). Warum ist das so?<br />
Und wie müßte ich das schreiben, wenn ich in beiden Klassen einen =-Operator hätte? Muß ich dann</p>
<pre><code class="language-cpp">a.Basis::operator = (3);
</code></pre>
<p>schreiben oder geht das auch kürzer/besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179941/problem-bei-ableitung-und-gleichnamiger-funktion-mit-anderen-parametern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 17:07:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179941.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Apr 2007 20:02:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:02:35 GMT]]></title><description><![CDATA[<p>Wenn ich folgendes Programm habe:</p>
<pre><code class="language-cpp">class Basis
{
public:

	virtual void Funktion ()
	{
	}
};

class Abgeleitet: public Basis
{
public:

	virtual void Funktion (int i)
	{
	}
};

int main ()
{
	Abgeleitet a;

	a.Funktion ();          //Fehler
	//a.Basis::Funktion (); //So funktioniert es

	return 0;
}
</code></pre>
<p>Warum funktioniert dann der Aufruf in Zeile 23 nicht? Dadurch, daß die Funktionen unterschiedliche Parameter haben, müßte die abgeleitete Klasse doch problemlos auf beide zugreifen können. Aber trotzdem muß ich hier die Basisklasse explizit mit angeben (Zeile 24). Warum ist das so?<br />
Und wie müßte ich das schreiben, wenn ich in beiden Klassen einen =-Operator hätte? Muß ich dann</p>
<pre><code class="language-cpp">a.Basis::operator = (3);
</code></pre>
<p>schreiben oder geht das auch kürzer/besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274215</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:09:07 GMT]]></title><description><![CDATA[<p>Mit der Funktion Funktion(int i) in Abgeleitet, versteckst du die Funktion Funktion() aus der Basis.</p>
<p>Hier steht die Geschichte nochmal genauer: <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=oho#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=oho#Answ</a></p>
<p>Edit:</p>
<blockquote>
<p>Generell läuft die Suche nach der passenden Funktion in drei Schritten ab:</p>
<p>1. Bildung der Kandidatenmenge<br />
2. Auswahl der Funktionen mit passender Signatur aus der Kandidatenmenge<br />
3. Auswahl der am Besten passenden Funktion</p>
<p>Für uns ist hier nur der erste Schritt wichtig.</p>
<p>Ausgehend vom Scope in dem der Aufruf steht, kommen alle die Funktionen in die Kandidatenmenge, die den selben Namen haben wie die aufzurufende Funktion. Existiert in dem Scope keine solche Funktion, wird der darüberliegende Scope durchsucht. Umschließende Scopes werden also nur berücksichtigt, wenn in den eingeschlossenen Scopes keine gleichnamige Funktion existiert.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1274217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274217</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:09:06 GMT]]></title><description><![CDATA[<p>Eine Name, der in einer abgeleiteten Klasse deklariert wird, verdeckt alle Entitäten gleichen Namens in den Basisklassen (es sei denn es handelt sich um das Überschreiben einer virtuellen Funktion - hier nicht der Fall). Diese können dann nur durch qualifizierten Aufruf gefunden werden. Die Verwendung einer using-Dekalartion kann das ändern - denn das entspricht einer Redeklaration aller Entitäten dieses Namens aus der jeweiligen Klasse. Also hier:</p>
<pre><code class="language-cpp">class Abgeleitet: public Basis
{
public:
    using Basis::Funktion;
    virtual void Funktion (int i)
    {
    }
};
</code></pre>
<p>Ansonsten empfehle ich dafür die Lektüre eines Buches. Das Verständnis für die Problematik des Verdeckens von Namen und das Verhältnis zu Redeklaration und Überschreiben braucht ein bisschen Zeit und meine Erklärungen sind da etwas zu knapp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274218</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:15:06 GMT]]></title><description><![CDATA[<p>Keine Sorge, ich weiß an sich, was es mit dem Verdecken von Funktionen bei Ableitungen und den Problemen damit auf sich hat.<br />
Ich hätte nur nicht gedacht, daß man das so realisiert hat, daß schon allein der Name der Funktion alle Funktionen aus der Basisklasse verdeckt. Meiner Meinung nach ist das schlecht umgesetzt, denn zwei Funktionen</p>
<pre><code class="language-cpp">void Funktion ();
void Funktion (int i);
</code></pre>
<p>sind ohne Probleme durch ihre unterschiedlichen Parameter auseinanderzuhalten. Demnach, finde ich, sollte diese Verdeckung erst eintreten, wenn die Funktionen in den beiden Klassen den gleichen Namen <em>und</em> die gleichen Parameter haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274223</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:16:24 GMT]]></title><description><![CDATA[<p>und was wäre bei</p>
<pre><code class="language-cpp">void Funktion();
void Funktion(int = 1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1274224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274224</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:22:40 GMT]]></title><description><![CDATA[<p>Nun, dies ist ja an sich kein Problem des Verdeckens mehr, denn sowas kann auch auftreten, wenn ich innerhalb derselben Klasse zwei solche Funktionen schreibe. (Dann kommt beim Aufruf von Funktion () eben ein Fehler im Stil von: &quot;Nicht eindeutiger Aufruf einer überladenen Funktion&quot;, so wie es ja jetzt auch der Fall ist.) Und das bedeutet: Dies ist kein guter Grund, Verdeckung schon allein am Namen festzumachen. Denn wie gesagt: So ein Problem kann ja ohnehin auftreten, auch wenn wir gar nicht mit Ableitungen arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274226</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Ableitung und gleichnamiger Funktion mit anderen Parametern on Thu, 26 Apr 2007 20:35:03 GMT]]></title><description><![CDATA[<p>nun ja, es ist nicht schwer, einige Gründe zu finden. Letzlich ist es ja bereits jetzt schon so, dass das Namelookup eher zu viel als zu wenig findet. Zudem bedeutet name lookup eben genau das: es wird nach Namen und nicht nach Signaturen gesucht - die Auswahl zwischen verschiedenen Überladungen kann hier noch gar nicht stattfinden. Zudem gäbe es ja sonst auch keine Möglichkeit, in verschachtelten Namensräumen Bezeichner aus den äußeren Namensräumen auch mal loszuwerden - was dem Sinn von Namensräumen doch etwas zuwiderläuft. Wenn ich in verschiedenen Namensräumen etwas mit dem gleichen Namen deklariere, handelt es sich normalerweise um völlig verschiedenen Dinge - deshalb stehen sie ja auch nicht zusammen. Dann soll aber auch der Anwender nicht raten müssen, was gefunden wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274229</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 26 Apr 2007 20:35:03 GMT</pubDate></item></channel></rss>