<?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[Virtual mal so, mal so...]]></title><description><![CDATA[<p>Hi everyone</p>
<p>Folgendes Problem: Klasse C erbt von Klasse B, welche selbst von Klasse A abgeleitet ist.</p>
<p>Die Subklassen B und C haben je eine virtuelle Funktion read().</p>
<p>In meinem Projekt existieren sehr viele Funktionen, die einen Pointer des Typs A als Parameter entgegen nehmen, welcher auf ein B oder C Objekt zeigt (Polymorphismus sei dank). Diese Funktionen rufen dann die entsprechende read-Funktion des B oder C-Objekts auf, je nachdem, um was für ein Objekt es sich handelt.</p>
<p>Für die meisten Funktionen in meinem Hauptprogramm ist dieses Verhalten absolut perfekt. Nun benötige ich für ein letztes Feature allerdings die Möglichkeit, mit einem Pointer auf ein C-Objekt dessen read-Funktion der B-Klasse aufzurufen.</p>
<p>Nach meinem Verständnis sollte das ja eigentlich möglich sein, denn C erbt ja von B. Nur weiss ich leider nicht, wie ich das mit einer virtuellen Funktion machen soll.</p>
<p>Thx schon 'mal für eure Antworten und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186612/virtual-mal-so-mal-so</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 10:20:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186612.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jul 2007 16:26:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtual mal so, mal so... on Tue, 10 Jul 2007 16:26:51 GMT]]></title><description><![CDATA[<p>Hi everyone</p>
<p>Folgendes Problem: Klasse C erbt von Klasse B, welche selbst von Klasse A abgeleitet ist.</p>
<p>Die Subklassen B und C haben je eine virtuelle Funktion read().</p>
<p>In meinem Projekt existieren sehr viele Funktionen, die einen Pointer des Typs A als Parameter entgegen nehmen, welcher auf ein B oder C Objekt zeigt (Polymorphismus sei dank). Diese Funktionen rufen dann die entsprechende read-Funktion des B oder C-Objekts auf, je nachdem, um was für ein Objekt es sich handelt.</p>
<p>Für die meisten Funktionen in meinem Hauptprogramm ist dieses Verhalten absolut perfekt. Nun benötige ich für ein letztes Feature allerdings die Möglichkeit, mit einem Pointer auf ein C-Objekt dessen read-Funktion der B-Klasse aufzurufen.</p>
<p>Nach meinem Verständnis sollte das ja eigentlich möglich sein, denn C erbt ja von B. Nur weiss ich leider nicht, wie ich das mit einer virtuellen Funktion machen soll.</p>
<p>Thx schon 'mal für eure Antworten und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322493</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual mal so, mal so... on Tue, 10 Jul 2007 16:35:21 GMT]]></title><description><![CDATA[<p>Ruf die Methode direkt auf, statt Polymorphie zu benutzen.</p>
<p>Das geht so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::cout;

struct A
{
	virtual void print() const = 0;
};

struct B : A
{
	virtual void print() const
	{
		cout &lt;&lt; &quot;\tB::print()\n&quot;;
	}
};

struct C : B
{
	virtual void print() const
	{
		cout &lt;&lt; &quot;\tC::print()\n&quot;;
	}
};

int main()
{
	C obj;

	A&amp; a = obj;
	B&amp; b = obj;
	C&amp; c = obj;

	cout &lt;&lt; &quot;Calling obj with reference to A: &quot;;
	a.print();

	cout &lt;&lt; &quot;Calling obj with reference to B: &quot;;
	b.print();

	cout &lt;&lt; &quot;Calling obj with reference to C: &quot;;
	c.print();

	cout &lt;&lt; &quot;Calling obj with reference to B and B::print(): &quot;;
	b.B::print();

	cout &lt;&lt; &quot;Calling obj with reference to C and B::print(): &quot;;
	c.B::print();
}
</code></pre>
<p>Du musst natürlich wissen, dass es &quot;mindestens&quot; ein B ist, also mindestens eine Referenz/Pointer auf B haben mit dem du das Objekt ansprichst. Aber laut deiner Formulierung ist das ja der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322498</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual mal so, mal so... on Tue, 10 Jul 2007 16:42:00 GMT]]></title><description><![CDATA[<p>Hey, nicht schlecht, das wird mir sicher noch nützlich sein <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>
<p>Klappt das auch &quot;nach unten&quot;? Meine Referenz ist nämlich vom Typ der Basisklasse A...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322506</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual mal so, mal so... on Tue, 10 Jul 2007 16:49:53 GMT]]></title><description><![CDATA[<p>Nein, hab ich doch extra dazu geschrieben.</p>
<p>Aber wenn du weißt, dass es &quot;mindestens&quot; ein B ist, dann kannst du einen downcast durchführen:</p>
<pre><code class="language-cpp">C c;

A&amp; a = c;

B&amp; b = dynamic_cast&lt; B&amp; &gt;( a );
</code></pre>
<p>Wenn es nicht klappt, dann wird eine std::bad_cast exception geworfen. Wenn a ein Zeiger ist, dann wird ein NULL-Zeiger zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322514</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual mal so, mal so... on Tue, 10 Jul 2007 21:09:41 GMT]]></title><description><![CDATA[<p>Yeah, danke Mann! Es hat geklappt!</p>
<p>Das war ja fast zu einfach, um wahr zu sein <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="😃"
    /> .</p>
<p>Dieses Forum rockt!!!</p>
<p>Schön' Abend noch und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322651</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Tue, 10 Jul 2007 21:09:41 GMT</pubDate></item></channel></rss>