<?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[Abgeleitete Funktion überladen und aus der Basisklasse aufrufen]]></title><description><![CDATA[<p>mich würde interessieren ob es möglich ist eine rein virtuelle methode in der unterklasse zu definieren und dann so zu überladen, dass sie auch aus oberklasse pointern aufgerufen wird?</p>
<p>konkreter fall:<br />
ich habe in meinem spiel ausrüstungsgegenstände die vom interface &quot;IEquippable&quot; abgeleitet werden und &quot;recieveEvent(IEvent const&amp; e)&quot; definieren müssen. z.b. um eingehenden schaden zu verwalten. jetzt wäre es natürlich praktisch, wenn man diese methode nur überläd und die entsprechenden events automatisch in der richtigen methode landen. also:</p>
<pre><code>class Jacket : public IEquippable
{
[...]
bool recieveEvent(DamageEvent const&amp; e){LOG(&quot;damage&quot;);}
bool recieveEvent(IEvent const&amp; e){LOG(&quot;standart);}
[...]
};
</code></pre>
<p>sende ich jetzt an ein Jacket objekt im Jacket pointer ein event sende bekomme ich &quot;damage&quot; geloggt (wer hätts gedacht) im IEquippable pointer bekomme ich &quot;standart&quot;. da ich aber ausrüstung immer nur mit IEquippable behandle...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296763/abgeleitete-funktion-überladen-und-aus-der-basisklasse-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 17:59:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296763.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Dec 2011 20:17:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abgeleitete Funktion überladen und aus der Basisklasse aufrufen on Sun, 11 Dec 2011 21:57:18 GMT]]></title><description><![CDATA[<p>mich würde interessieren ob es möglich ist eine rein virtuelle methode in der unterklasse zu definieren und dann so zu überladen, dass sie auch aus oberklasse pointern aufgerufen wird?</p>
<p>konkreter fall:<br />
ich habe in meinem spiel ausrüstungsgegenstände die vom interface &quot;IEquippable&quot; abgeleitet werden und &quot;recieveEvent(IEvent const&amp; e)&quot; definieren müssen. z.b. um eingehenden schaden zu verwalten. jetzt wäre es natürlich praktisch, wenn man diese methode nur überläd und die entsprechenden events automatisch in der richtigen methode landen. also:</p>
<pre><code>class Jacket : public IEquippable
{
[...]
bool recieveEvent(DamageEvent const&amp; e){LOG(&quot;damage&quot;);}
bool recieveEvent(IEvent const&amp; e){LOG(&quot;standart);}
[...]
};
</code></pre>
<p>sende ich jetzt an ein Jacket objekt im Jacket pointer ein event sende bekomme ich &quot;damage&quot; geloggt (wer hätts gedacht) im IEquippable pointer bekomme ich &quot;standart&quot;. da ich aber ausrüstung immer nur mit IEquippable behandle...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2155884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2155884</guid><dc:creator><![CDATA[Steevoe]]></dc:creator><pubDate>Sun, 11 Dec 2011 21:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Funktion überladen und aus der Basisklasse aufrufen on Sun, 11 Dec 2011 20:38:41 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du nach double dispatching suchst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2155895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2155895</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 11 Dec 2011 20:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Abgeleitete Funktion überladen und aus der Basisklasse aufrufen on Sun, 11 Dec 2011 21:57:08 GMT]]></title><description><![CDATA[<p>ja korrekt, danke <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="🙂"
    /><br />
das stichwort hat mir geholfen</p>
<p>PS: klasse signatur <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>EDIT:<br />
ich habs jetzt implementiert, aber es läuft immer noch nicht so wie ich will.<br />
nur damit ich das richtig verstanden habe:</p>
<p>meine code änderungen:</p>
<pre><code>struct eqDamageEvent : public IEvent
{
	void fireEqEvent(IEquippable&amp; eq)
	{
		eq.recieveEvent(*this);
	}
};

IEquippable* jacket = new TestJacket();
IEquippable::eqDamageEvent e;
e.fireEqEvent(*jacket);
</code></pre>
<p>ich rufe vom event die methode fireEqEvent(...) auf. weil eq innerhalb der methode eine referenz ist wird recieveEvent im vtable nachgeschaut was dazu führt, dass die methode recieveEvent(DamageEvent &amp;const) aus der unterklasse TestJacket gefunden wird. is aber leider nicht so, ich bekomme immernoch die ausgabe &quot;standart&quot;. was habe ich also misverstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2155904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2155904</guid><dc:creator><![CDATA[Steevoe]]></dc:creator><pubDate>Sun, 11 Dec 2011 21:57:08 GMT</pubDate></item></channel></rss>