<?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[Typumwanldung zwischen Klassen mit static_cast]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Beispiel:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class Demo {
public:
	int i;
};

class Abl : Demo {
};

int main(void) {
	void *vp = new Demo;
	cout &lt;&lt; vp-&gt;i &lt;&lt; endl; // nicht zulässig
	Demo * dp = static_cast&lt;Demo *&gt;(vp);
	dp-&gt;i = 7;
	Abl * ap = new Abl;
	Demo * dp2 = static_cast&lt;Demo *&gt;(ap); // nicht zulässig
	dp2 = ap; // nicht zulässig
	Abl * ap2 = static_cast&lt;Abl *&gt;(dp); // nicht zulässig
	ap2 = dp; // nicht zulässig
	return 0;
}
</code></pre>
<p>Zeile 14 und 15: Was wird da gemacht und wieso ist die Zeile 15 nicht zulässig?<br />
Zeile 19: Cast ab vom Typ Abl nach Typ Demo, wieso geht das nicht?<br />
Zeile 21: Cast dp vom Typ Demo nach Typ Abl, wieso geht das nicht?</p>
<p>Die Subklasse nach Hauptklasse sollte man doch casten können, da die Subklasse alle Methoden der Hauptklasse besitzt.</p>
<p>Danke <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/topic/327020/typumwanldung-zwischen-klassen-mit-static_cast</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 23:36:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327020.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Jul 2014 17:11:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Sat, 19 Jul 2014 17:11:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Beispiel:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class Demo {
public:
	int i;
};

class Abl : Demo {
};

int main(void) {
	void *vp = new Demo;
	cout &lt;&lt; vp-&gt;i &lt;&lt; endl; // nicht zulässig
	Demo * dp = static_cast&lt;Demo *&gt;(vp);
	dp-&gt;i = 7;
	Abl * ap = new Abl;
	Demo * dp2 = static_cast&lt;Demo *&gt;(ap); // nicht zulässig
	dp2 = ap; // nicht zulässig
	Abl * ap2 = static_cast&lt;Abl *&gt;(dp); // nicht zulässig
	ap2 = dp; // nicht zulässig
	return 0;
}
</code></pre>
<p>Zeile 14 und 15: Was wird da gemacht und wieso ist die Zeile 15 nicht zulässig?<br />
Zeile 19: Cast ab vom Typ Abl nach Typ Demo, wieso geht das nicht?<br />
Zeile 21: Cast dp vom Typ Demo nach Typ Abl, wieso geht das nicht?</p>
<p>Die Subklasse nach Hauptklasse sollte man doch casten können, da die Subklasse alle Methoden der Hauptklasse besitzt.</p>
<p>Danke <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/2409431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409431</guid><dc:creator><![CDATA[golfer]]></dc:creator><pubDate>Sat, 19 Jul 2014 17:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Sat, 19 Jul 2014 17:38:47 GMT]]></title><description><![CDATA[<p>Kannst du alles im Buch deiner Wahl bzw. dem C++ Online-Kurs deiner Wahl nachlesen.<br />
Das Forum ist nicht der geeignete Platz um Grundlagen zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409435</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 19 Jul 2014 17:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Sat, 19 Jul 2014 18:25:19 GMT]]></title><description><![CDATA[<p>golfer schrieb:</p>
<blockquote>
<p>Die Subklasse nach Hauptklasse sollte man doch casten können, da die Subklasse alle Methoden der Hauptklasse besitzt.</p>
</blockquote>
<p>Bist du dir da sicher? Guck dir nochmal an, wie Abi und Demo sich zueinander verhalten. Abi hat hier keine &quot;<em>ist ein</em>&quot;-Beziehung zu Demo. Vielleicht suchst du das Wörtchen public…</p>
<p>Die restlichen Fragen sind dadurch wohl auch beantwortet, denn anscheinend sind dir solche Beziehungen ja bekannt. Ein Demo ist kein void, und ein Demo ist im Allgemeinen kein Abi. Der Versuch, ein Demo in eines dieser Objekte zu pressen, benötigt daher mehr als einen static_cast. Gleiche Regeln gelten auch für die Zeiger auf diese Typen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409443</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 19 Jul 2014 18:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Sat, 19 Jul 2014 19:53:27 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ein Demo ist kein void, und ein Demo ist im Allgemeinen kein Abi. Der Versuch, ein Demo in eines dieser Objekte zu pressen, benötigt daher mehr als einen static_cast. Gleiche Regeln gelten auch für die Zeiger auf diese Typen.</p>
</blockquote>
<p><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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2409446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409446</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 19 Jul 2014 19:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Sat, 19 Jul 2014 20:01:41 GMT]]></title><description><![CDATA[<p>[quote=&quot;hustbaer&quot;]</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ein Demo ist kein void, und ein Demo ist im Allgemeinen kein Abi. Der Versuch, ein Demo in eines dieser Objekte zu pressen, benötigt daher mehr als einen static_cast. Gleiche Regeln gelten auch für die Zeiger auf diese Typen.</p>
</blockquote>
<p>Stimmt <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="🙂"
    /> . Korrektur: Außer im Fall von void*. Aus Gründen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409447</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 19 Jul 2014 20:01:41 GMT</pubDate></item><item><title><![CDATA[Reply to Typumwanldung zwischen Klassen mit static_cast on Mon, 21 Jul 2014 10:30:50 GMT]]></title><description><![CDATA[<p>golfer schrieb:</p>
<blockquote>
<pre><code>class Abl : Demo {
};
[...]
	Demo * dp2 = static_cast&lt;Demo *&gt;(ap); // nicht zulässig
	dp2 = ap; // nicht zulässig
	Abl * ap2 = static_cast&lt;Abl *&gt;(dp); // nicht zulässig
</code></pre>
</blockquote>
<p>Der Compiler hilft dir weiter:</p>
<pre><code>demo.cpp:19:40: error: 'Demo' is an inaccessible base of 'Abl'
demo.cpp:20:11: error: 'Demo' is an inaccessible base of 'Abl'
demo.cpp:21:38: error: 'Demo' is an inaccessible base of 'Abl'
demo.cpp:22:11: error: 'Demo' is an inaccessible base of 'Abl'
</code></pre>
<p>Bei</p>
<pre><code>class Abl : public Demo {
};
</code></pre>
<p>wird die base accessible und es kompiliert.</p>
<p>(bis auf die letzte Zuweisung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409669</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Mon, 21 Jul 2014 10:30:50 GMT</pubDate></item></channel></rss>