<?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[methoden überschreiben und stl container]]></title><description><![CDATA[<p>ich bin eben auf ein problem gestoßen das will mir nicht in den kopf. ich habe eine basisklasse mit einer virtual methode. davon habe ich eine klasse abgeleitet und die virtul methode überschrieben. wenn ich jetzt das ganze in eine funktion geben die nur ein objekt der basis klasse erwartet, funktioniert alles trotzdem so wies soll (die funktion der abgeleiteten klasse wird aufgerufen)<br />
wenn ich das ganze jetzt in einen stl container (vector&lt;base&gt;) gebe, über einen iterator durchlaufe und die funktion aufrufe, ruft er nur die funktion der basis klasse auf... warum?</p>
<p>hier noch ein kleines programm damit ihr wist was ich meine:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class base
{
	public:
		base() {};
		~base() {};
		virtual void hallo() { std::cout &lt;&lt; &quot;base sagt hallo&quot; &lt;&lt; std::endl; };
};

class inherited : public base
{
	public:
		inherited() {};
		~inherited() {};
		void hallo() { std::cout &lt;&lt; &quot;inherited sagt hallo&quot; &lt;&lt; std::endl; };
};

void test(base&amp; b1, base&amp; b2)
{
	b1.hallo();
	b2.hallo();

	vector&lt;base&gt; vec;

	vec.push_back(b1);
	vec.push_back(b2);

	vector&lt;base&gt;::iterator it;
	for (it = vec.begin(); it != vec.end(); ++it)
	    it-&gt;hallo();
}

int main(int argc, char *argv[])
{
	base b;
	inherited i;
	test(b, i);

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>ausgeben sollte es eigentlich</p>
<pre><code>base sagt hallo
inherited sagt hallo
base sagt hallo
inherited sagt hallo
</code></pre>
<p>aber da er nur die base funktion aufruft kommt da:</p>
<pre><code>base sagt hallo
inherited sagt hallo
base sagt hallo
base sagt hallo
</code></pre>
<p>habt ihr da ne ahnung warum und wie ich das umgehen kann? liegt das vielleicht an den templates, dass kein &quot;late binding&quot; (steht da in dem buch) durchgeführt wird?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129166/methoden-überschreiben-und-stl-container</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:55:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129166.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Dec 2005 21:21:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to methoden überschreiben und stl container on Sat, 10 Dec 2005 21:21:00 GMT]]></title><description><![CDATA[<p>ich bin eben auf ein problem gestoßen das will mir nicht in den kopf. ich habe eine basisklasse mit einer virtual methode. davon habe ich eine klasse abgeleitet und die virtul methode überschrieben. wenn ich jetzt das ganze in eine funktion geben die nur ein objekt der basis klasse erwartet, funktioniert alles trotzdem so wies soll (die funktion der abgeleiteten klasse wird aufgerufen)<br />
wenn ich das ganze jetzt in einen stl container (vector&lt;base&gt;) gebe, über einen iterator durchlaufe und die funktion aufrufe, ruft er nur die funktion der basis klasse auf... warum?</p>
<p>hier noch ein kleines programm damit ihr wist was ich meine:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class base
{
	public:
		base() {};
		~base() {};
		virtual void hallo() { std::cout &lt;&lt; &quot;base sagt hallo&quot; &lt;&lt; std::endl; };
};

class inherited : public base
{
	public:
		inherited() {};
		~inherited() {};
		void hallo() { std::cout &lt;&lt; &quot;inherited sagt hallo&quot; &lt;&lt; std::endl; };
};

void test(base&amp; b1, base&amp; b2)
{
	b1.hallo();
	b2.hallo();

	vector&lt;base&gt; vec;

	vec.push_back(b1);
	vec.push_back(b2);

	vector&lt;base&gt;::iterator it;
	for (it = vec.begin(); it != vec.end(); ++it)
	    it-&gt;hallo();
}

int main(int argc, char *argv[])
{
	base b;
	inherited i;
	test(b, i);

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>ausgeben sollte es eigentlich</p>
<pre><code>base sagt hallo
inherited sagt hallo
base sagt hallo
inherited sagt hallo
</code></pre>
<p>aber da er nur die base funktion aufruft kommt da:</p>
<pre><code>base sagt hallo
inherited sagt hallo
base sagt hallo
base sagt hallo
</code></pre>
<p>habt ihr da ne ahnung warum und wie ich das umgehen kann? liegt das vielleicht an den templates, dass kein &quot;late binding&quot; (steht da in dem buch) durchgeführt wird?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939243</guid><dc:creator><![CDATA[fallen]]></dc:creator><pubDate>Sat, 10 Dec 2005 21:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to methoden überschreiben und stl container on Sat, 10 Dec 2005 21:25:08 GMT]]></title><description><![CDATA[<p>Das liegt an deinem Vektor. bei push_back erstellst du ein neues Objekt des Types base.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939250</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sat, 10 Dec 2005 21:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to methoden überschreiben und stl container on Sat, 10 Dec 2005 21:27:54 GMT]]></title><description><![CDATA[<p>oh mein gott bin ich blöd.... wie peinlich 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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/939252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939252</guid><dc:creator><![CDATA[fallen]]></dc:creator><pubDate>Sat, 10 Dec 2005 21:27:54 GMT</pubDate></item></channel></rss>