<?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[dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte einem objekt der Abgeleiteten Klasse ein Objekt der Basisklasse zuweisen. Das Basisklassen-Objekt wurde dynamisch angelegt.</p>
<pre><code>AbgeleiteteKlasse* test = static_cast&lt;AbgeleiteteKlasse*&gt;(ObjektBasisklasse);
</code></pre>
<p>dem Objekt test der abgeleiteten klasse weise ich mittels set-methoden noch<br />
einige werte zu.</p>
<pre><code>test-&gt;setValue(x*y);
</code></pre>
<p>Das funktioniert auch soweit bis das programm beendet wird. Dann bekomme ich eine Meldung dass der Heap beschädigt ist.<br />
Weise ich dem objekt test keine werte zu bekomme ich die Meldung nicht.<br />
Gehe ich recht in der Annahme dass man dynamisch erzeugte Objekte nicht so einfach dem abgeleiteten Objekt zuweisen kann? Falls ja wie macht man das dann?</p>
<p>thx schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286596/dynamisch-erzeugtes-objekt-der-basisklass-der-abgeleiteten-zuweisen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 20:32:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286596.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 May 2011 19:19:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:19:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte einem objekt der Abgeleiteten Klasse ein Objekt der Basisklasse zuweisen. Das Basisklassen-Objekt wurde dynamisch angelegt.</p>
<pre><code>AbgeleiteteKlasse* test = static_cast&lt;AbgeleiteteKlasse*&gt;(ObjektBasisklasse);
</code></pre>
<p>dem Objekt test der abgeleiteten klasse weise ich mittels set-methoden noch<br />
einige werte zu.</p>
<pre><code>test-&gt;setValue(x*y);
</code></pre>
<p>Das funktioniert auch soweit bis das programm beendet wird. Dann bekomme ich eine Meldung dass der Heap beschädigt ist.<br />
Weise ich dem objekt test keine werte zu bekomme ich die Meldung nicht.<br />
Gehe ich recht in der Annahme dass man dynamisch erzeugte Objekte nicht so einfach dem abgeleiteten Objekt zuweisen kann? Falls ja wie macht man das dann?</p>
<p>thx schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062450</guid><dc:creator><![CDATA[xxmaxx]]></dc:creator><pubDate>Thu, 12 May 2011 19:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:27:14 GMT]]></title><description><![CDATA[<p>Das hat wenig Sinn, denn die Basisklasse ist weniger als die abgeleitete Klasse. Dementsprechend kann ein Objekt der Basisklasse auch nicht über einen Zeiger auf die abgeleitete Klasse referenziert werden.<br />
Oder im OOP-Sprech: Ein Objekt einer abgeleiteten Klasse <em>ist ein</em> Objekt seiner Basisklasse, aber ein Objekt der Basisklasse <em>ist kein</em> Objekt einer von ihm abgeleiteten Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062452</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 12 May 2011 19:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:35:31 GMT]]></title><description><![CDATA[<p>Das versteh ich jetzt nicht ganz. Es ist mir klar dass die basisklasse &quot;weniger&quot; ist. aber mit:</p>
<pre><code>AbgeleiteteKlasse* test = static_cast&lt;AbgeleiteteKlasse*&gt;(ObjektBasisklasse);
</code></pre>
<p>weise ich eben der abgeleiteten klasse nur den teil der basisklasse zu.<br />
mit static cast konvertiere ich eben das basisklassenobjekt in ein abgeleitetes, objekt, oder etwa nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062456</guid><dc:creator><![CDATA[xxmaxx]]></dc:creator><pubDate>Thu, 12 May 2011 19:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:40:05 GMT]]></title><description><![CDATA[<p>xxmaxx schrieb:</p>
<blockquote>
<p>Das versteh ich jetzt nicht ganz. Es ist mir klar dass die basisklasse &quot;weniger&quot; ist. aber mit:</p>
<pre><code>AbgeleiteteKlasse* test = static_cast&lt;AbgeleiteteKlasse*&gt;(ObjektBasisklasse);
</code></pre>
<p>weise ich eben der abgeleiteten klasse nur den teil der basisklasse zu.<br />
mit static cast konvertiere ich eben das basisklassenobjekt in ein abgeleitetes, objekt, oder etwa nicht?</p>
</blockquote>
<p>Du konvertierst einen <em>Zeiger</em> auf die Basisklasse in einer Zeiger auf die abgeleitete Klasse. Dadurch bekommt aber Dein Basisklasseobjekt nicht plötzlich auf magische Weise die fehlenden Teile der abgeleiteten Klasse (im Speicher ist nur das Basisklassenobjekt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062460</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 12 May 2011 19:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:52:40 GMT]]></title><description><![CDATA[<p>hmm ok. aber mein objekt der abgeleiteten klasse hat ja eben noch zusätzliche member. wie kann ich jetzt, nachdem ich dem abgeleiteten obj. das basisklassenobj. zugewiesen habe, auf diese member zugreifen und werte zuweisen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062466</guid><dc:creator><![CDATA[xxmaxx]]></dc:creator><pubDate>Thu, 12 May 2011 19:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:57:42 GMT]]></title><description><![CDATA[<p>Du hast überhaupt kein abgeleitetes Objekt - du hast nur einen Zeiger, der glaubt auf ein abgeleitetes Objekt zu zeigen. Und wenn du da auf die Elemente der Kindklasse zugreifst, erwischst du in Wirklichkeit Speicherbereiche, die dir nicht gehören (hier waren's wohl Verwaltungsdaten des Heap-Managers).<br />
Wenn du ein Objekt der abgeleiteten Klasse benötigst, solltest du auch so eins erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062473</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 12 May 2011 19:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 19:57:51 GMT]]></title><description><![CDATA[<p>xxmaxx schrieb:</p>
<blockquote>
<p>hmm ok. aber mein objekt der abgeleiteten klasse hat ja eben noch zusätzliche member. wie kann ich jetzt, nachdem ich dem abgeleiteten obj. das basisklassenobj. zugewiesen habe, auf diese member zugreifen und werte zuweisen?</p>
</blockquote>
<p>Gar nicht. Das sage ich ja die ganze Zeit. Deine Basisklasse hat die Member nicht. Auch wenn die mit einem Zeiger auf irgendeine abgeleitete Klasse auf Deine Basisklassenobjekt zeigst bleibt es trotzdem das Basisklassenobjekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062474</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 12 May 2011 19:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Thu, 12 May 2011 20:09:30 GMT]]></title><description><![CDATA[<p>ok da hab ich wohl was falsch verstanden <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>vielen dank auch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062481</guid><dc:creator><![CDATA[xxmaxx]]></dc:creator><pubDate>Thu, 12 May 2011 20:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 07:16:38 GMT]]></title><description><![CDATA[<p>Deswegen nimmt man für einen Downcast auch dynamic_cast. Da kann man nachher prüfen ob das überhaupt geklappt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062598</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 13 May 2011 07:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 07:55:08 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Deswegen nimmt man für einen Downcast auch dynamic_cast. Da kann man nachher prüfen ob das überhaupt geklappt hat.</p>
</blockquote>
<p>Das geht aber nur, wenn man mit der Basisklasse auf ein Objekt der abgeleiteten Klasse zeigt. Wenn man nur ein Objekt der Basisklasse hat, hilft <code>dynamic_cast</code> reichlich wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062606</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 13 May 2011 07:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 08:43:26 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Das geht aber nur, wenn man mit der Basisklasse auf ein Objekt der abgeleiteten Klasse zeigt. Wenn man nur ein Objekt der Basisklasse hat, hilft <code>dynamic_cast</code> reichlich wenig.</p>
</blockquote>
<p>Wieso? Dann sollte doch 0 zurückgegeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062632</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 13 May 2011 08:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 08:46:39 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Das geht aber nur, wenn man mit der Basisklasse auf ein Objekt der abgeleiteten Klasse zeigt. Wenn man nur ein Objekt der Basisklasse hat, hilft <code>dynamic_cast</code> reichlich wenig.</p>
</blockquote>
<p>Wieso? Dann sollte doch 0 zurückgegeben werden.</p>
</blockquote>
<p>Wird auch. Nur kann man dann bei der Überprüfung des cast Ergebnisses auch gleich <code>if(false)...</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062640</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 13 May 2011 08:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 14:38:57 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn man nur ein Objekt der Basisklasse hat, hilft <code>dynamic_cast</code> reichlich wenig.</p>
</blockquote>
<p>Doch - wenn static_cast&lt;&gt; auf das falsche Objekt angewendet wird, erhältst du Müll, bei dynamic_cast&lt;&gt; bekommst du einen definierten Fehler (NULL-Zeiger bzw. bad_cast-Exception).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062814</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 13 May 2011 14:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 15:49:40 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Deswegen nimmt man für einen Downcast auch dynamic_cast. Da kann man nachher prüfen ob das überhaupt geklappt hat.</p>
</blockquote>
<p>Ich nehme für Downcasts eigentlich immer <code>static_cast</code> . Und zwar weil ich in den Fällen, in denen ich downcaste, den Typ kenne. Wenn ich den Typ nicht kenne, versuche ich ihn nicht durch Typunterscheidungen herauszufinden. Daher finde ich <code>dynamic_cast</code> nur in Ausnahmefällen sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062886</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 May 2011 15:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 16:04:09 GMT]]></title><description><![CDATA[<p>Hast du schonmal mit der VCL gearbeitet. Da brauchst du diesen cast schon manchmal. Das trifft auch auf andere Fremdlibs zu, wo du halt manchmal wirklich nur den Zeiger auf eine Basisklasse bekommst.<br />
Bei komplett selbst geschriebenen Sachen stimme ich dir aber zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062899</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 13 May 2011 16:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to dynamisch erzeugtes objekt der basisklass der abgeleiteten zuweisen on Fri, 13 May 2011 16:27:18 GMT]]></title><description><![CDATA[<p>Nein, mit der VCL habe ich keine Erfahrung. Kann durchaus sein, dass das manchmal vorkommt. Das bringt mich aber auf den Gedanken eines Dynamic-Dispatchers für unäre Funktionen, den ich mir vor einiger Zeit geschrieben habe:</p>
<pre><code class="language-cpp">// In der Bibliothek festgelegt
class A {...};
class B : public A {...};
class C : public A {...};

A* GetBasePointer();

// Eigene Funktionen für abgeleitete Typen
void Function(B* b);
void Function(C* c);

int main()
{
    // Objekt erstellen, das quasi Überladungen zur Laufzeit dispatcht
    SingleDispatcher&lt;A*&gt; sd;
    sd.Register&lt;B&gt;(&amp;Function);
    sd.Register&lt;C&gt;(&amp;Function);

    // Ruft automatisch richtige Funktion auf oder
    // wirft Exception, falls keine Entsprechung gefunden
    sd.Call( GetBasePointer() );
}
</code></pre>
<p>Manchmal ist ein simples <code>dynamic_cast</code> vielleicht einfacher, aber gerade wenn man viele Typen hat, kann sich der Dynamic-Dispatch lohnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062917</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 May 2011 16:27:18 GMT</pubDate></item></channel></rss>