<?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[Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung)]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Elem
{
	Elem * next;

};

struct Zahl: public Elem
{
	int Wert;
};

int main()
{
	Zahl z;
	z.Wert = 10;

	Elem *e = &amp;z;			//Zeiger auf ein Element(speziell eine Zahl)

	Zahl *z2 = (Zahl*) e;	//&lt;-???

	cout&lt;&lt; z2-&gt;Wert;

}
</code></pre>
<p>Hallo.<br />
Kann mir einer sagen was in der Zeile</p>
<pre><code class="language-cpp">Zahl *z2 = (Zahl*) e;	//&lt;-???
</code></pre>
<p>genau passiert ?</p>
<p>Der Abgeleiteten Klasse (bzw. dem Pointer auf sie) wird hier doch ein Pointer auf ein Objekt der Basisklasse zugewiesen. Allerdings habe ich keinen Zuweisungsoperator überladen. Was geschieht denn da genau ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191248/was-passiert-hier-genau-typumwandlung-basisklasse-gt-ableitung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 23:10:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191248.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Aug 2007 17:48:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 17:48:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Elem
{
	Elem * next;

};

struct Zahl: public Elem
{
	int Wert;
};

int main()
{
	Zahl z;
	z.Wert = 10;

	Elem *e = &amp;z;			//Zeiger auf ein Element(speziell eine Zahl)

	Zahl *z2 = (Zahl*) e;	//&lt;-???

	cout&lt;&lt; z2-&gt;Wert;

}
</code></pre>
<p>Hallo.<br />
Kann mir einer sagen was in der Zeile</p>
<pre><code class="language-cpp">Zahl *z2 = (Zahl*) e;	//&lt;-???
</code></pre>
<p>genau passiert ?</p>
<p>Der Abgeleiteten Klasse (bzw. dem Pointer auf sie) wird hier doch ein Pointer auf ein Objekt der Basisklasse zugewiesen. Allerdings habe ich keinen Zuweisungsoperator überladen. Was geschieht denn da genau ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356326</guid><dc:creator><![CDATA[bauglir]]></dc:creator><pubDate>Fri, 31 Aug 2007 17:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 17:51:51 GMT]]></title><description><![CDATA[<p>trollalarm -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356328</guid><dc:creator><![CDATA[trollalarm]]></dc:creator><pubDate>Fri, 31 Aug 2007 17:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 17:53:29 GMT]]></title><description><![CDATA[<p>trollalarm schrieb:</p>
<blockquote>
<p>trollalarm -.-</p>
</blockquote>
<p>Und was bist du dann? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>@bauglir:<br />
Wenn du selber keinen Zuweisungs-Operator schreibst, erstellt dir der Compiler einen.<br />
Und diese Codezeile castet e in einen Zahl* und weißt ihn z2 zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356331</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Fri, 31 Aug 2007 17:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 17:54:14 GMT]]></title><description><![CDATA[<p>jo der postet in vb foren und <a href="http://forum-hilfe.de" rel="nofollow">forum-hilfe.de</a> usw... omg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356333</guid><dc:creator><![CDATA[joooooooo]]></dc:creator><pubDate>Fri, 31 Aug 2007 17:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 18:01:51 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>so etwas in die richtung habe ich mir gedacht.</p>
<p>Was ich allerdings noch nicht ganz verstehe :</p>
<p>Am Anfang habe ich ja diese Zahl z mit dem Wert 10.<br />
Dann wird dem Pointer *e vom Typ Elem diese Zahl zugewiesen. Soweit denke ich kein Problem, denn &quot;Zahl ist ein Elem&quot; dachte ich mir.</p>
<p>Wird dadurch das Elem automatisch zur Zahl ? Denn der Wert der in z steht geht ja nicht verloren, und ich kann auf ihn zugreifen, wenn ich *e wieder zurück zum Typ Zahl caste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356339</guid><dc:creator><![CDATA[bauglir]]></dc:creator><pubDate>Fri, 31 Aug 2007 18:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 18:31:36 GMT]]></title><description><![CDATA[<p>bauglir schrieb:</p>
<blockquote>
<p>Wird dadurch das Elem automatisch zur Zahl ? Denn der Wert der in z steht geht ja nicht verloren, und ich kann auf ihn zugreifen, wenn ich *e wieder zurück zum Typ Zahl caste.</p>
</blockquote>
<p>Das ist das Problem an C-Casts in C++, das funktioniert nur, wenn e tatsächlich auf ein Zahl-Objekt zeigt. Wenn es einen anderen Typ hat (z.B. eine auch von Elem abgeleitete Klasse &quot;Buchstabe&quot;), erhälst Du undefiniertes Verhalten.</p>
<p>Als Lösung dafür gibt's den dynamic_cast, der 0 zurückliefert, wenn e auf etwas anderes als ein Zahl-Objekt zeigt, oder entsprechend eine bad_cast Exception wirft, wenn Du Referenzen castest.</p>
<pre><code class="language-cpp">Elem* e = new Zahl;
Zahl* z = dynamic_cast&lt;Zahl*&gt;(e);
if (z != 0) {
  ...
}
</code></pre>
<p>Allerdings sollte man dynamic_cast meiden, wenn es andere Techniken gibt, um das gewünschte zu erreichen. Und die gibt es fast immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356361</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 31 Aug 2007 18:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert hier genau ? (Typumwandlung Basisklasse -&amp;gt; Ableitung) on Fri, 31 Aug 2007 18:48:59 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Als Lösung dafür gibt's den dynamic_cast, der 0 zurückliefert, wenn e auf etwas anderes als ein Zahl-Objekt zeigt, oder entsprechend eine bad_cast Exception wirft, wenn Du Referenzen castest.</p>
<pre><code class="language-cpp">Elem* e = new Zahl;
Zahl* z = dynamic_cast&lt;Zahl*&gt;(e);
if (z != 0) {
  ...
}
</code></pre>
</blockquote>
<p>Hier aber nicht, da Zahl kein polymorpher Typ ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356374</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 18:48:59 GMT</pubDate></item></channel></rss>