<?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[std::vector zund vererbung]]></title><description><![CDATA[<p>annahme ich habe die klassen</p>
<p>Alphabet</p>
<p>und die davon abgeleiteten KLassen A und B</p>
<p>alle haben die member-funktion x()</p>
<p>wenn ich nun eine instanz von A oder B</p>
<p>in einen vector&lt;Alphabet&gt; packe und davon die funktion x aufrufe, wird Alphabet::x() aufgerufen,</p>
<p>wie kann ich bewerkstelligen dass die Funktionen der abgeleiteten klassen statt dessen verwendet werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224262/std-vector-zund-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 18:25:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224262.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Oct 2008 16:33:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:33:07 GMT]]></title><description><![CDATA[<p>annahme ich habe die klassen</p>
<p>Alphabet</p>
<p>und die davon abgeleiteten KLassen A und B</p>
<p>alle haben die member-funktion x()</p>
<p>wenn ich nun eine instanz von A oder B</p>
<p>in einen vector&lt;Alphabet&gt; packe und davon die funktion x aufrufe, wird Alphabet::x() aufgerufen,</p>
<p>wie kann ich bewerkstelligen dass die Funktionen der abgeleiteten klassen statt dessen verwendet werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594969</guid><dc:creator><![CDATA[blubb]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:34:50 GMT]]></title><description><![CDATA[<p>Mach sie virtuell.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594970</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:37:46 GMT]]></title><description><![CDATA[<p>dann brauchst du aber ein std::vector&lt;Alphabet *&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594972</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:37:46 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:50:17 GMT]]></title><description><![CDATA[<p>wenn ich keine zeiger benutzen will?<br />
gibts da ne möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594975</guid><dc:creator><![CDATA[blubb again]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:55:20 GMT]]></title><description><![CDATA[<p>Nein. Nicht wenn du die Klassen in einen vector packen willst. Polymorphie funktioniert über Zeiger und Referenzen. Du kannst aber keine Referenzen in einen vector packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594978</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 16:55:27 GMT]]></title><description><![CDATA[<p>blubb schrieb:</p>
<blockquote>
<p>wenn ich nun eine instanz von A oder B</p>
<p>in einen vector&lt;Alphabet&gt; packe</p>
</blockquote>
<p>... dann hast du ein wunderbares Beispiel von dem was man Slicing nennt: Ein vector&lt;Alphabet&gt; speichert nur Alphabet-Objekte, und nur die. Wenn du ein A oder B Objekt in den vector packst, nimmt er nur den Alphabet-Teil davon, den Rest nicht. Deshalb ists kein Wunder, dass nur Alphabet::x() aufgerufen wird, denn das Objekt im vector IST eben nur ein Alphabet und nicht mehr. Wenn du polymorphe Objekte mittles vector verwalten willst musst du wie schon gesagt wurde auf Pointer (oder smartpointer oder Container wie boost::pointervector oder ähnliches) zurückgreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594979</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 07 Oct 2008 16:55:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 17:13:03 GMT]]></title><description><![CDATA[<p>oder du nimmst eine eigene containerklasse</p>
<pre><code class="language-cpp">class AlphabetContainer
{
public:
    AlphabetContainer(Alphabet *a) : p(a){}
    ~AlphabetContainer(){delete p;}
    Alphabet *operator -&gt; (){return p;}
    Alphabet &amp;operator * (){return *p;}
private:
    Alphabet *p;
};

std::vector&lt;AlphabetContainer&gt; vec;

int main()
{
    vec.push_back(new A);
    vec.push_back(new B);

    for (unsigned i = 0; i &lt; vec.size(); ++i)
        vec[i]-&gt;Function(42.0001);
}
</code></pre>
<p>als beispiel(nicht perfekt da kein refcount)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594989</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 07 Oct 2008 17:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 17:18:00 GMT]]></title><description><![CDATA[<p>ok kann mir wenigstens einer ein anwendungsbeispiel reinschreiben?</p>
<p>oder wie rufe ich dann auf?</p>
<pre><code>B b;
C c;
vector&lt;Alphabet*&gt; v(2);
v.push_back(&amp;b);
v.push_back(&amp;c);

?  *v[1].x(); ?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1594992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594992</guid><dc:creator><![CDATA[blubb?]]></dc:creator><pubDate>Tue, 07 Oct 2008 17:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 17:46:23 GMT]]></title><description><![CDATA[<p>oder v[1]-&gt;x();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595010</guid><dc:creator><![CDATA[bl u bb]]></dc:creator><pubDate>Tue, 07 Oct 2008 17:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 17:50:25 GMT]]></title><description><![CDATA[<p>blubb? schrieb:</p>
<blockquote>
<pre><code>*v[1].x();
</code></pre>
</blockquote>
<p>Da der .-Operator stärker bindet als der Dereferenzierungsoperator musst du das ganze klammern:</p>
<pre><code>(*v[1]).x();
</code></pre>
<p>oder ganz einfach</p>
<pre><code>v[1]-&gt;x();
</code></pre>
<p>schließlich ist v[1] ein Zeiger wie jeder andere auch...</p>
<p>Übrigens: bei deinem Beispiel hast du v mit 2 initialisiert, d.h. zwei default-initialisierte Pointer (also nullpointer) befinden sich im vector. Danach fügst du mit push_back die beiden Pointer hinten an. v[1]-&gt;x() wird dir zur Laufzeit um die Ohren fliegen, da v[0] und v[1] nicht dereferenziert werden können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595016</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 07 Oct 2008 17:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 18:09:58 GMT]]></title><description><![CDATA[<p>herzlichen dank des klappt <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>und is noch einfach genug dass es ein anfänger verstehen kann</p>
<p>falls noch einer lust hat zu antworten:</p>
<p>ich hab keine ahnung was folgendes bedeutet:</p>
<p>p** is das ein zeiger auf einen zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595032</guid><dc:creator><![CDATA[b l U b b]]></dc:creator><pubDate>Tue, 07 Oct 2008 18:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector zund vererbung on Tue, 07 Oct 2008 18:12:01 GMT]]></title><description><![CDATA[<p>ja, p** ist ein Zeiger auf einen Zeiger. In C kommt sowas des öfteren vor, in C++ sollte es eher eine Rarität sein (könnte mir grad keinen Grund vorstellen sowas zu verwenden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595035</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 07 Oct 2008 18:12:01 GMT</pubDate></item></channel></rss>