<?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[Überladene + virtuelle Methoden]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: Ich ahbe drei Klassen A, B, C, wobei B von A erbt und C von B. A definiert die virtuelle Methode foo(int), B die Methode foo() und C wiederum foo(int).</p>
<p>Wenn ich nun eine Instanz von C habe (über einen Zeiger von B), möchte ich gerne das foo(int) von C rufen. Wie kann ich das machen?</p>
<p>Vielleicht besser noch etwas Code zur Veranschaulichung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace ::std;

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

class B : virtual public A {
public :
	virtual void foo() {
		cout &lt;&lt; &quot;B::foo&quot; &lt;&lt; endl;
	}
};

class C : virtual public B {
public :
	virtual void foo(int) {
		cout &lt;&lt; &quot;C::foo(int)&quot; &lt;&lt; endl;
	}
};

int main() {
	B* b = new C();
	b-&gt;foo();
	b-&gt;A::foo(1); // ruft A::foo(int), aber nicht C::foo(int)
}
</code></pre>
<p>In der letzten Zeile von Main rufe ich b-&gt;A::foo(1), also das foo (int) von A. Ich möchte allerdings hier das foo von C rufen - wie bekomme ich das hin?</p>
<p>Grü0e,</p>
<p>RandomC++Noob</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301950/überladene-virtuelle-methoden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 15:23:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301950.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2012 17:42:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladene + virtuelle Methoden on Sat, 07 Apr 2012 17:42:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: Ich ahbe drei Klassen A, B, C, wobei B von A erbt und C von B. A definiert die virtuelle Methode foo(int), B die Methode foo() und C wiederum foo(int).</p>
<p>Wenn ich nun eine Instanz von C habe (über einen Zeiger von B), möchte ich gerne das foo(int) von C rufen. Wie kann ich das machen?</p>
<p>Vielleicht besser noch etwas Code zur Veranschaulichung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace ::std;

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

class B : virtual public A {
public :
	virtual void foo() {
		cout &lt;&lt; &quot;B::foo&quot; &lt;&lt; endl;
	}
};

class C : virtual public B {
public :
	virtual void foo(int) {
		cout &lt;&lt; &quot;C::foo(int)&quot; &lt;&lt; endl;
	}
};

int main() {
	B* b = new C();
	b-&gt;foo();
	b-&gt;A::foo(1); // ruft A::foo(int), aber nicht C::foo(int)
}
</code></pre>
<p>In der letzten Zeile von Main rufe ich b-&gt;A::foo(1), also das foo (int) von A. Ich möchte allerdings hier das foo von C rufen - wie bekomme ich das hin?</p>
<p>Grü0e,</p>
<p>RandomC++Noob</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199711</guid><dc:creator><![CDATA[RandomC++Noob]]></dc:creator><pubDate>Sat, 07 Apr 2012 17:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Überladene + virtuelle Methoden on Sat, 07 Apr 2012 18:11:19 GMT]]></title><description><![CDATA[<p>B::foo() verdeckt A::foo(int), auch wenn es keinen Parameter erwartet.<br />
Dadurch kennt die Klasse B keine Funktion foo(int).<br />
Um das zu ändern, musst du in der Definition von B</p>
<pre><code class="language-cpp">using A::foo;
</code></pre>
<p>reinschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199723</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to Überladene + virtuelle Methoden on Sun, 08 Apr 2012 13:54:39 GMT]]></title><description><![CDATA[<p>Na indem du es über einen A* aufrufst</p>
<pre><code class="language-cpp">int main() {
	B* b = new C();
	b-&gt;foo();
	//b-&gt;A::foo(1); // ruft A::foo(int), aber nicht C::foo(int)
	static_cast&lt;A*&gt;(b)-&gt;foo(1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199922</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 08 Apr 2012 13:54:39 GMT</pubDate></item></channel></rss>