<?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[using bei abgeleiteten klassen]]></title><description><![CDATA[<p>hallo,<br />
kann mir jemand sagen wann ich funktionen einer klasse mit using einbinden muss und wann sie automatisch zur verfügung stehen? ich blick da nämlich noch nicht ganz durch wann ich using brauche und wann nicht.<br />
danke schon mal im voraus.<br />
grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205831/using-bei-abgeleiteten-klassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 14:22:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205831.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Feb 2008 13:45:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 13:45:57 GMT]]></title><description><![CDATA[<p>hallo,<br />
kann mir jemand sagen wann ich funktionen einer klasse mit using einbinden muss und wann sie automatisch zur verfügung stehen? ich blick da nämlich noch nicht ganz durch wann ich using brauche und wann nicht.<br />
danke schon mal im voraus.<br />
grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458198</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 18 Feb 2008 13:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 14:39:09 GMT]]></title><description><![CDATA[<p>Der <strong>Name</strong> jeder public/protected Funktion der Basisklasse ist auch in abgeleiteten Klassen grundsaetzlich zugaenglich. Solltest du allerdings eine Funktion der Basisklasse in der abgeleiteten Klasse ueberschreiben, verdeckst du damit alle weiteren Funktionen gleichen Namens in der Basisklasse:</p>
<pre><code class="language-cpp">class C {
public:
  virtual void Foo();
  void Foo(int);
  void Foo(double);
};

class D : public C {
public:
  void Foo(int);  //verdeckt C::Foo(int) und C::Foo(double)
  using C::Foo; //macht die beiden wieder sichtbar
};
</code></pre>
<p>Der Grund ist, dass der Compiler, sobald er einen Namen sieht, immer erst im umgebenden Namespace nachschaut, dann in dessen umgebenden Namespace und so weiter, bis er einen entsprechenden Namen findet. Ist ein (oder mehrere) Name gefunden, wird nicht weiter gesucht und ueberprueft, welcher der gefundenen Namen am Besten zum Aufruf passt, und danach, ob der Zugriff verfuegbar ist (public etc).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458224</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 14:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 14:47:14 GMT]]></title><description><![CDATA[<p>ist das auch so wenn die beiden funktionen zwar den gleichen namen aber unterschiedliche parameter haben.<br />
warum sind denn die parameter dabei irrelevant, ich meine wenn die auch gleich sind kann ich es ja nachvollziehen das man die nicht sieht, wegen der lokalität. aber das bei deinem beispiel die foo(double) auch überdeckt find ich eigenartig. naja dann muss ich wohl überall ein using bei mir reinnehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458234</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 18 Feb 2008 14:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 15:27:24 GMT]]></title><description><![CDATA[<p>Der Compiler sucht als erstes nur nach dem Namen. Hat er den gefunden, schaut er, dass er den tatsaechlichen Funktionsparameter moeglichst gut mit den formalen Parametern der gefundenen Funktionen matchen kann, zur Not durch implizite Konvertierungen.</p>
<p>Laesst man in meinem Beispiel das using weg und ruft Foo fuer ein D auf, findet er D::Foo(int) und hoert sofort auf zu suchen. Dann versucht er, den uebergebenen Parameter (egal was fuer einer das ist, oder obs mehr als einer ist) zum int zu machen.</p>
<p>Ein aehnliches Problem ist folgendes:</p>
<pre><code class="language-cpp">class C {
  Foo(double);
public:
  Foo(float);
};

int main() {
  C c;
  c.Foo(23.56); //Error: Foo(double) is private
  c.Foo(23); //Error: ambigue overload of Foo()
}
</code></pre>
<p>Man koennte denken, dass ganz klar beidemale Foo(float) aufgerufen werden muss, da Foo(double) ja private ist, aber da der Compiler erst nach der Signatur guckt, findet er, dass Foo(double) ein perfekter Match fuer 23.56 ist und findet danach erst raus, dass das private ist und damit nicht zugaenglich. bei Foo(23) stellt er fest, dass die Konvertierung von int nach float und double gleich gut ist und kann sich nicht entscheiden - die Zugru=iffsrechte zieht er garnicht erst in Betracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458259</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 15:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 15:47:10 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Man koennte denken, dass ganz klar beidemale Foo(float) aufgerufen werden muss, da Foo(double) ja private ist, aber da der Compiler erst nach der Signatur guckt, findet er, dass Foo(double) ein perfekter Match fuer 23.56 ist und findet danach erst raus, dass das private ist und damit nicht zugaenglich. bei Foo(23) stellt er fest, dass die Konvertierung von int nach float und double gleich gut ist und kann sich nicht entscheiden - die Zugru=iffsrechte zieht er garnicht erst in Betracht.</p>
</blockquote>
<p>Ganz schön dumm, so ein C++-Compiler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458277</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 18 Feb 2008 15:47:10 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 15:54:35 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ganz schön dumm, so ein C++-Compiler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
</blockquote>
<p>Jein. Stell dir vor er machts anders und du wechselst irgendwann in einer Klasse die Zugriffsrechte einer Funktion. Das Programm haette sofort eine voellig andere Aussage weil eine andere Funktion aufgerufen wuerde - nur durch die Aenderung der Zugriffsrechte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458280</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 15:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 16:25:39 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Ganz schön dumm, so ein C++-Compiler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
</blockquote>
<p>Jein. Stell dir vor er machts anders und du wechselst irgendwann in einer Klasse die Zugriffsrechte einer Funktion. Das Programm haette sofort eine voellig andere Aussage weil eine andere Funktion aufgerufen wuerde - nur durch die Aenderung der Zugriffsrechte.</p>
</blockquote>
<p>Das ist doch jetzt auch schon so, nur eben nicht in dem von Dir beschriebenen Spezialfall.<br />
EDIT: Alles Quatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458302</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 18 Feb 2008 16:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Mon, 18 Feb 2008 22:03:56 GMT]]></title><description><![CDATA[<p>gut dann mach ich das jetzt halt mit dem using. ist zwar mehr schreibarbeit, die konzeptmäßig nicht notwendig wäre, aber ist wohl nicht zu ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458521</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 18 Feb 2008 22:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Tue, 19 Feb 2008 03:03:20 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Der <strong>Name</strong> jeder public/protected Funktion der Basisklasse ist auch in abgeleiteten Klassen grundsaetzlich zugaenglich. Solltest du allerdings eine Funktion der Basisklasse in der abgeleiteten Klasse ueberschreiben, verdeckst du damit alle weiteren Funktionen gleichen Namens in der Basisklasse:</p>
<pre><code class="language-cpp">class C {
public:
  virtual void Foo();
  void Foo(int);
  void Foo(double);
};

class D : public C {
public:
  void Foo(int);  //verdeckt C::Foo(int) und C::Foo(double)
  using C::Foo; //macht die beiden wieder sichtbar
};
</code></pre>
</blockquote>
<p>fast:<br />
die deklaration <code>void Foo(int)</code> verdeckt alle Foos aus C, und die using deklaration in diesem beispiel macht nur <code>C::Foo(double)</code> und <code>C::Foo()</code> wieder sichtbar. ( <code>C::Foo(int)</code> wird immer noch von <code>D::Foo(int)</code> verdeckt)</p>
<p>damit der code zu deiner beschreibung passt:</p>
<pre><code class="language-cpp">class D : public C {
public:
  void Foo();  //überschreibt C::Foo(), verdeckt C::Foo(int) und C::Foo(double)
  using C::Foo; //macht C::Foo(int) und C::Foo(double) wieder sichtbar.
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1458547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458547</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 19 Feb 2008 03:03:20 GMT</pubDate></item><item><title><![CDATA[Reply to using bei abgeleiteten klassen on Tue, 19 Feb 2008 07:36:09 GMT]]></title><description><![CDATA[<p>Ja sry, hatte das Beispiel von woanders kopiert, wo ich es schonmal gemacht hatte. Hab dann die Argumente geändert aber nicht die Kommentare <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Typisches Beispiel von doppelter Information und einseitiger Änderung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458582</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 19 Feb 2008 07:36:09 GMT</pubDate></item></channel></rss>