<?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[Element eines Basis Object Arrays soll etwas anderes werden!]]></title><description><![CDATA[<p>Moin,</p>
<p>Eben Bsp. Code.</p>
<pre><code class="language-cpp">class A{};
class B : public A{};

void func(int size){
    A* array = new A[size];
    array[irgendwo] = new B(); // Fehler!

}
</code></pre>
<p>Egal wie ich es drehe und wende ich bekomme diesen Ausdrcuk nicht fehler frei<br />
compeliert.<br />
Ich komme aus der &quot;Java-Scene&quot;,(Genauer gesagt versuch ich gerade ein Java Project in C++ umzusetzen.)<br />
und verzweifele nun an dem Versuch hier die Polymorphie umszuseten soweit ich die gelernt habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> . Sollte ja theoretisch<br />
auch möglich sein in C++ nur wie bzw. wie setzte ich das um? Oder liege ich hier komplett falsch?</p>
<p>MFG Walter :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167791/element-eines-basis-object-arrays-soll-etwas-anderes-werden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 02:23:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167791.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Dec 2006 21:59:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Element eines Basis Object Arrays soll etwas anderes werden! on Thu, 14 Dec 2006 21:59:24 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Eben Bsp. Code.</p>
<pre><code class="language-cpp">class A{};
class B : public A{};

void func(int size){
    A* array = new A[size];
    array[irgendwo] = new B(); // Fehler!

}
</code></pre>
<p>Egal wie ich es drehe und wende ich bekomme diesen Ausdrcuk nicht fehler frei<br />
compeliert.<br />
Ich komme aus der &quot;Java-Scene&quot;,(Genauer gesagt versuch ich gerade ein Java Project in C++ umzusetzen.)<br />
und verzweifele nun an dem Versuch hier die Polymorphie umszuseten soweit ich die gelernt habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> . Sollte ja theoretisch<br />
auch möglich sein in C++ nur wie bzw. wie setzte ich das um? Oder liege ich hier komplett falsch?</p>
<p>MFG Walter :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192098</guid><dc:creator><![CDATA[Schlee]]></dc:creator><pubDate>Thu, 14 Dec 2006 21:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to Element eines Basis Object Arrays soll etwas anderes werden! on Thu, 14 Dec 2006 22:10:39 GMT]]></title><description><![CDATA[<p>Ich wuerde es mal mit</p>
<pre><code class="language-cpp">A* array = new A*[size];
</code></pre>
<p>versuchen, denn wenn du neuen speicher anforderst</p>
<pre><code class="language-cpp">array[irgendwo] = new B();
</code></pre>
<p>muss das Arrayelement auch ein Zeiger sein.<br />
Nebenbei duerftest du probleme bekommen wenn du wieder aus der Funktion rausspringst, da dein Zeiger array gelöscht wird und du somit nichtmehr an den reservierten Speicherplatz rankommst =&gt; Zombiespeicher</p>
<p>MFG<br />
chewbo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192104</guid><dc:creator><![CDATA[chewbo]]></dc:creator><pubDate>Thu, 14 Dec 2006 22:10:39 GMT</pubDate></item><item><title><![CDATA[Reply to Element eines Basis Object Arrays soll etwas anderes werden! on Fri, 15 Dec 2006 09:00:48 GMT]]></title><description><![CDATA[<p>chewbo schrieb:</p>
<blockquote>
<p>Ich wuerde es mal mit</p>
<pre><code class="language-cpp">A* array = new A*[size];
</code></pre>
<p>versuchen, denn wenn du neuen speicher anforderst</p>
</blockquote>
<p>Sogar noch einen Schritt weiter - du benötigst ein Array von Zeigern, für dessen Adresse mußt du einen Doppelzeiger anlegen:</p>
<pre><code class="language-cpp">A** array = new A*[size];
array[irgendwo] = new B;

//Achtung - aufräumen nicht vergessen:
delete array[irgendwo];
delete[] array;
</code></pre>
<p>PS: Und die Klasse A benötigt einen virtuellen Destruktor, sonst landest du mit dem &quot;delete array[irgendwo]&quot; im Bereich des undefinierten Verhaltens.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192208</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Dec 2006 09:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Element eines Basis Object Arrays soll etwas anderes werden! on Fri, 15 Dec 2006 09:17:58 GMT]]></title><description><![CDATA[<p>chewbo schrieb:</p>
<blockquote>
<p>...<br />
Nebenbei duerftest du probleme bekommen wenn du wieder aus der Funktion rausspringst, da dein Zeiger array gelöscht wird und du somit nichtmehr an den reservierten Speicherplatz rankommst =&gt; Zombiespeicher</p>
<p>MFG<br />
chewbo</p>
</blockquote>
<p>Deswegen würde ich Schlee auch Folgendes vorschlagen:<br />
------<br />
NACHTRAG: Hat CStoll wieder mal schneller, besser und umfassender beantwortet...<br />
(Du legst kein Array von As an, sondern vo Zeigern auf A (macht java eigentlich auch) )<br />
erster Vorschlag deleted<br />
----</p>
<p>Alternativ (eigentlich sogar komfortabler) kannst Du auch mit vector&lt;A*&gt; arbeiten - der verwaltet die Länge für Dich und Du kannst die Länge auch noch &quot;zur Lebenszeit&quot; ändern.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

class A{ public: virtual ~A() {} };
class B : public A{};

// wenn etwas nur positiv sein kann, sollte man das sagen -&gt; unsigned
void func(unsigned int size){ 
    std::vector&lt;A*&gt; v;
    for(unsigned int i=0; i&lt;size; ++i) v.push_back(new A());

    unsigned int irgendwo = 2;
    delete v[irgendwo];
    v[irgendwo] = new B();

    // später wieder aufräumen (macht man besser mit RAII 
    // - aber das erkläre ich nicht hier)
    for(unsigned int i=0; i&lt;v.size(); ++i) delete v[i];    
}
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1192212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1192212</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 15 Dec 2006 09:17:58 GMT</pubDate></item></channel></rss>