<?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[Pointergröße bei Vererbung]]></title><description><![CDATA[<p>Hallo,<br />
ich habe zwei Klassen, von denen eine die Basisklasse der anderen ist.</p>
<pre><code class="language-cpp">class A
{
    public:
        int avar;
};

class B : public A
{
    public:
        double bvar;
};
</code></pre>
<p>Wenn ich jetzt ein neues B-Objekt erstelle, dies aber in einem A-Pointer speichere, wo werden dann die 8 Byte des doubles untergebracht?<br />
Vor allem bei einem A*-Array, bei dem ich mittendrin ein B* einfüge, müsste das doch Probleme geben <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/topic/285158/pointergröße-bei-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:35:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285158.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Apr 2011 10:02:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 10:02:34 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe zwei Klassen, von denen eine die Basisklasse der anderen ist.</p>
<pre><code class="language-cpp">class A
{
    public:
        int avar;
};

class B : public A
{
    public:
        double bvar;
};
</code></pre>
<p>Wenn ich jetzt ein neues B-Objekt erstelle, dies aber in einem A-Pointer speichere, wo werden dann die 8 Byte des doubles untergebracht?<br />
Vor allem bei einem A*-Array, bei dem ich mittendrin ein B* einfüge, müsste das doch Probleme geben <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/2049773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049773</guid><dc:creator><![CDATA[Grillwurst]]></dc:creator><pubDate>Fri, 15 Apr 2011 10:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 10:08:47 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht sicher, ob du dich nur ungeschickt ausdrückst: Die Pointer selbst sind alle gleich groß. Außerdem kannst du nichts in &quot;Pointern speichern&quot;. Du kannst mit Pointern auf eine Stelle zeigen, wo ein Objekt existiert. Wenn du mit einem A-Zeiger auf ein B zeigst, dann ist der Rest vom B trotzdem noch an der Stelle.<br />
Du kannst auch nicht verschieden große Objekte in einem Array speichern. Wenn du einem A ein B zuweist, dann wird nur der A-Teil des B zugewiesen. Das nennt man dann &quot;splicing&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049777</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 15 Apr 2011 10:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 10:11:18 GMT]]></title><description><![CDATA[<p>Dein A-Zeiger zeigt auf die Adresse des B-Objektes - das ist möglich, weil ein B automatisch ein A ist. Aber der A-Zeiger hat nur Zugriff auf die A-Elemente im B-Objekt, sodass du einfach keinen Zugriff auf dein <code>bvar</code> hast - es wird einfach ignoriert.</p>
<p>Stell dir folgendes vor:</p>
<p>Klasse A<br />
+------+<br />
|4 Byte|<br />
+------+</p>
<p>Klasse B, von A abgeleitet<br />
+------+<br />
|A-Teil|<br />
|4 Byte|<br />
+------+<br />
|B-Teil|<br />
|8 Byte|<br />
+------+</p>
<p>Dein A-Zeiger zeigt zwar auf das ganze B-Objekt, aber Zugriff hat er nur auf den A-Teil. Verstehst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049779</guid><dc:creator><![CDATA[Glühbirne]]></dc:creator><pubDate>Fri, 15 Apr 2011 10:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 10:17:37 GMT]]></title><description><![CDATA[<p>Wie meinst du das genau?</p>
<p>Wenn du ein A-Objekt erstellst, dann werden sizeof(A)-Byte im RAM belegt.<br />
Wenn du ein B-Objekt erstellst, dann werden sizeof(B)-Byte im RAM belegt.<br />
Wenn du ein 32-bit System hast, benötigt ein Pointer 4 Byte, es werden also 4 Byte im RAM belegt. In diesen 4 Bytes speicherst du nun die Adresse eines Objekts, was zur Folge hat, dass der Pointer auf dieses Objekt zeigt.</p>
<p>public-Vererbung bedeutet &quot;is-a&quot;. In deinem Fall bedeutet das nun, dass jedes B auch ein A ist (nicht umgekehrt!), d.h. dass du selbstverständlich mit einem A-Pointer auf ein B-Objekt zeigen kannst, weil, wie gesagt, B auch ein A ist. Allerdings hat ein A-Pointer nur Informationen zur Klasse A, d.h. du kannst natürlich nur den A-Teil des B-Objektes ansprechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049782</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Apr 2011 10:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 11:43:36 GMT]]></title><description><![CDATA[<p>Typisierte Pointer geben einfach nur an, wie die referenzierte Speicherstelle zu interpretieren ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049815</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Fri, 15 Apr 2011 11:43:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pointergröße bei Vererbung on Fri, 15 Apr 2011 14:41:08 GMT]]></title><description><![CDATA[<p>Ich hatte einen Denkfehler, dass bei der Zuweisung eines A-Pointers auf ein B-Objekt dieses Objekt verschoben wird.</p>
<p>Habs jetzt verstanden, danke für die Antworten <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/2049896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049896</guid><dc:creator><![CDATA[Grillwurst]]></dc:creator><pubDate>Fri, 15 Apr 2011 14:41:08 GMT</pubDate></item></channel></rss>