<?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[virtuelle Funktionen und Vectoren]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<pre><code>#include &lt;stdlib.h&gt;
#include &lt;iostream.h&gt;
#include &lt;vector&gt;

class cA
{
public:
cA() {}
virtual void draw() {cout&lt;&lt;&quot;Draw:A&quot;&lt;&lt;endl;}
};

class cB : public cA
{
public:
cB() {}
virtual void draw() {cout&lt;&lt;&quot;Draw:B&quot;&lt;&lt;endl;}
};

int main()
{
std::vector&lt;cA&gt; Liste;
std::vector&lt;cA&gt;::Iterator it;

cA testA;
cB testB;

Liste.push_back(testA);
Liste.push_back(testB);

it = Liste.begin();

while(it != Liste.end())
{
it-&gt;draw();
it++;
}

return 0;
}
</code></pre>
<p>Nun greift er aber immer auf die Draw-Funktion von cA zu, die Ausgabe ist also zweimal &quot;Draw:A&quot;, obwohl die Funktion draw() als virtual deklariert ist. <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=":confused:"
      alt="😕"
    /></p>
<p>Kann es sein dass der Vector dass ganze durcheinander bringt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218271/virtuelle-funktionen-und-vectoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 12:32:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218271.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jul 2008 11:46:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 11:46:29 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<pre><code>#include &lt;stdlib.h&gt;
#include &lt;iostream.h&gt;
#include &lt;vector&gt;

class cA
{
public:
cA() {}
virtual void draw() {cout&lt;&lt;&quot;Draw:A&quot;&lt;&lt;endl;}
};

class cB : public cA
{
public:
cB() {}
virtual void draw() {cout&lt;&lt;&quot;Draw:B&quot;&lt;&lt;endl;}
};

int main()
{
std::vector&lt;cA&gt; Liste;
std::vector&lt;cA&gt;::Iterator it;

cA testA;
cB testB;

Liste.push_back(testA);
Liste.push_back(testB);

it = Liste.begin();

while(it != Liste.end())
{
it-&gt;draw();
it++;
}

return 0;
}
</code></pre>
<p>Nun greift er aber immer auf die Draw-Funktion von cA zu, die Ausgabe ist also zweimal &quot;Draw:A&quot;, obwohl die Funktion draw() als virtual deklariert ist. <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=":confused:"
      alt="😕"
    /></p>
<p>Kann es sein dass der Vector dass ganze durcheinander bringt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549331</guid><dc:creator><![CDATA[ImaNewbie]]></dc:creator><pubDate>Fri, 18 Jul 2008 11:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 11:53:15 GMT]]></title><description><![CDATA[<p>probiers mal mit</p>
<pre><code class="language-cpp">std::vector&lt;cA*&gt; Liste;
...

Liste.push_back(new testA);
Liste.push_back(new testB);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549336</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 18 Jul 2008 11:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 11:57:47 GMT]]></title><description><![CDATA[<p>Ne, tut er nicht. Der Vector ist in Ordnung.<br />
Du packst da aber eine Kopie von cB rein. Durch das Kopieren verliert Dein cB Objekt aber alle Besonderheit, die es cA hinzufügt und wird wieder ein reines cA Objekt (in ein cA-Objekt passt auch nur cA-Objekt rein).<br />
Du musst cA Pointer in dem Vektor ablegen, dann sollte das auch klappen:</p>
<pre><code class="language-cpp">std::vector&lt;cA*&gt; Liste;
//...
Liste.push_back(&amp;testA);
Liste.push_back(&amp;testB);
//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549338</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 18 Jul 2008 11:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 12:06:00 GMT]]></title><description><![CDATA[<p>Danke euch beiden, hat funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549350</guid><dc:creator><![CDATA[ImaNewbie]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 12:29:20 GMT]]></title><description><![CDATA[<p>ist ein gängiges problem für anfänger</p>
<p>nennt sich auch slicing falls du in der literatur mal nachlesen willst <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/1549369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549369</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Fri, 18 Jul 2008 12:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to virtuelle Funktionen und Vectoren on Fri, 18 Jul 2008 15:37:00 GMT]]></title><description><![CDATA[<p>inpimp schrieb:</p>
<blockquote>
<p>ist ein gängiges problem für anfänger</p>
<p>nennt sich auch slicing falls du in der literatur mal nachlesen willst <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>
</blockquote>
<p>Genau.<br />
Du solltest auch darauf achten bei Klassen die nicht kopierbar sind auch den copy-ctor und den assignment-operator zu &quot;sperren&quot;.<br />
Das machst du entweder indem du einen eigenen copy-ctor und assignment-operator als private deklarierst (definieren braucht du die beide nicht), oder indem du von einer Klasse ableitest die bereits auf diese Art nicht kopierbar gemacht wurde. Oder ein Member mit einer solchen nicht kopierbaren Klasse anlegst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549484</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 18 Jul 2008 15:37:00 GMT</pubDate></item></channel></rss>