<?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[Verständnisproblem bei Adressen von vererbten Klassenzeigern]]></title><description><![CDATA[<p><strong>EDIT: Meine Frage steht am Schluss!</strong></p>
<p>In einem meiner Bücher wurde eine Übungsfrage zum Zeigervergleich von abgeleiteten Klassen gestellt.</p>
<p>Da das Buch nur oberflächlich auf die implizite Konvertierung einging, ich Zitiere:</p>
<blockquote>
<p>Für Objekte von Klassen, zwischen denen ein public-Ableitungsverhältnis besteht, bzw. für Zeiger und Referenzen auf Objekte solcher Klassen führt der Compiler bei Bedarf implizite Konvertierungen durch, allerdings mit gewissen Einschränkungen, in sofern nämlich als zwar:</p>
<p>* ein Objekt der abgeleiteten Klasse in ein Objekt der Basisklasse<br />
* ein Zeiger (oder eine Referenz) auf ein Objekt der abgeleiteten Klasse in einen Zeiger (bzw. eine Referenz) auf ein Objekt der Basisklasse</p>
<p>umgewandelt wird.</p>
</blockquote>
<p>kann dies bei Bedarf bestehen, ein Bedarf den ich aber nicht kenne. Im weiteren wurde auch nicht auf den Vergleich oder den Vergleichsoperator zwischen Pointern von abgeleiteten Klassen eingegangen. Daher habe ich den Lösungsteil bemüht und festgestellt das der Compiler Pointer von abgeleiteten Klassen implizit in einen Basisklassen-Typen konvertiert.</p>
<p>Soweit so gut.</p>
<p>Jetzt zum Problem:</p>
<p>Die Adressen von &quot;Ein und Demselben&quot; Objekt können variieren... ! Und das habe ich dann wirklich nicht richtig verstanden.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class X
{
    public:
      int i;
      X() { cout &lt;&lt; &quot;Konstruktor X&quot; &lt;&lt; endl; }
};

class Y: public X
{
    public:
      int j;
      Y() { cout &lt;&lt; &quot;Konstruktor Y&quot; &lt;&lt; endl; }
};

class XA
{
    public:
      int i;
      XA() { cout &lt;&lt; &quot;Konstruktor XA&quot; &lt;&lt; endl; }
};

class YA
{
    public:
      int j;
      YA() { cout &lt;&lt; &quot;Konstruktor YA&quot; &lt;&lt; endl; }
};

class ZA : public XA, public YA
{
    public:
      int k;
      ZA() { cout &lt;&lt; &quot;Konstruktor ZA&quot; &lt;&lt; endl; }
};

int main()
{
    Y y;
    X* x = &amp;y;
    Y* py = &amp;y;

    cout &lt;&lt; &quot;Y*:: py zeigt auf Adresse: &quot; &lt;&lt; py &lt;&lt; endl;
    cout &lt;&lt; &quot;X*::  x zeigt auf Adresse: &quot; &lt;&lt; x &lt;&lt; endl;
    cout &lt;&lt; &quot;(Y*:: py == X*:: px) == &quot; &lt;&lt; ((py==x)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;

    ZA z;
    XA* xa = &amp;z;
    ZA* za = &amp;z;

    cout &lt;&lt; &quot;XA*::xa zeigt auf Adresse: &quot; &lt;&lt; xa &lt;&lt; endl;
    cout &lt;&lt; &quot;ZA*::za zeigt auf Adresse: &quot; &lt;&lt; za &lt;&lt; endl;
    cout &lt;&lt; &quot;(XA*::xa == ZA*::za) == &quot; &lt;&lt; ((xa==za)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;

    cout &lt;&lt; endl &lt;&lt; &quot;Soweit so klar! - ABER:&quot; &lt;&lt; endl &lt;&lt; endl;

    YA* ya = &amp;z;

    cout &lt;&lt; &quot;YA*::ya zeigt auf Adresse: &quot; &lt;&lt; ya &lt;&lt; endl;
    cout &lt;&lt; &quot;ZA*::za zeigt auf Adresse: &quot; &lt;&lt; za &lt;&lt; endl;
    cout &lt;&lt; &quot;(YA*::ya == ZA*::za) == &quot; &lt;&lt; ((ya==za)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;
    return 0;

}
</code></pre>
<p>Und der Output:</p>
<pre><code>Konstruktor X
Konstruktor Y
Y*:: py zeigt auf Adresse: 0x7fff12bb6340
X*::  x zeigt auf Adresse: 0x7fff12bb6340
(Y*:: py == X*:: px) == Wahr

Konstruktor XA
Konstruktor YA
Konstruktor ZA
XA*::xa zeigt auf Adresse: 0x7fff12bb6300
ZA*::za zeigt auf Adresse: 0x7fff12bb6300
(XA*::xa == ZA*::za) == Wahr

Soweit so klar! - ABER:

YA*::ya zeigt auf Adresse: 0x7fff12bb6304
ZA*::za zeigt auf Adresse: 0x7fff12bb6300
(YA*::ya == ZA*::za) == Wahr
</code></pre>
<p>Meine zwei Fragen:</p>
<ol>
<li>
<p>Warum ist das Adressen-Offset nur bei YA &lt;-&gt; ZA vorhanden? Und nicht bei allen anderen Pointern auch, aus dem Lehrbuch weiß ich das der Zeiger von YA auf ein Teilobjekt von ZA zeigt, aber genau das macht doch der Zeiger von XA auch, oder?</p>
</li>
<li>
<p>Und warum bei der Einfachvererbung solche Adress-Offsets nicht entstehen, wie beim Zeiger von X der auf ein Objekt von Y zeigt das von X abgeleitet wurde. Damit müsste X ja auch nur auf ein &quot;Teilobjekt&quot; von Y zeigen ?!</p>
</li>
</ol>
<p>Danke schon mal im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/249172/verständnisproblem-bei-adressen-von-vererbten-klassenzeigern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 15:35:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249172.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Sep 2009 14:46:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:00:51 GMT]]></title><description><![CDATA[<p><strong>EDIT: Meine Frage steht am Schluss!</strong></p>
<p>In einem meiner Bücher wurde eine Übungsfrage zum Zeigervergleich von abgeleiteten Klassen gestellt.</p>
<p>Da das Buch nur oberflächlich auf die implizite Konvertierung einging, ich Zitiere:</p>
<blockquote>
<p>Für Objekte von Klassen, zwischen denen ein public-Ableitungsverhältnis besteht, bzw. für Zeiger und Referenzen auf Objekte solcher Klassen führt der Compiler bei Bedarf implizite Konvertierungen durch, allerdings mit gewissen Einschränkungen, in sofern nämlich als zwar:</p>
<p>* ein Objekt der abgeleiteten Klasse in ein Objekt der Basisklasse<br />
* ein Zeiger (oder eine Referenz) auf ein Objekt der abgeleiteten Klasse in einen Zeiger (bzw. eine Referenz) auf ein Objekt der Basisklasse</p>
<p>umgewandelt wird.</p>
</blockquote>
<p>kann dies bei Bedarf bestehen, ein Bedarf den ich aber nicht kenne. Im weiteren wurde auch nicht auf den Vergleich oder den Vergleichsoperator zwischen Pointern von abgeleiteten Klassen eingegangen. Daher habe ich den Lösungsteil bemüht und festgestellt das der Compiler Pointer von abgeleiteten Klassen implizit in einen Basisklassen-Typen konvertiert.</p>
<p>Soweit so gut.</p>
<p>Jetzt zum Problem:</p>
<p>Die Adressen von &quot;Ein und Demselben&quot; Objekt können variieren... ! Und das habe ich dann wirklich nicht richtig verstanden.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class X
{
    public:
      int i;
      X() { cout &lt;&lt; &quot;Konstruktor X&quot; &lt;&lt; endl; }
};

class Y: public X
{
    public:
      int j;
      Y() { cout &lt;&lt; &quot;Konstruktor Y&quot; &lt;&lt; endl; }
};

class XA
{
    public:
      int i;
      XA() { cout &lt;&lt; &quot;Konstruktor XA&quot; &lt;&lt; endl; }
};

class YA
{
    public:
      int j;
      YA() { cout &lt;&lt; &quot;Konstruktor YA&quot; &lt;&lt; endl; }
};

class ZA : public XA, public YA
{
    public:
      int k;
      ZA() { cout &lt;&lt; &quot;Konstruktor ZA&quot; &lt;&lt; endl; }
};

int main()
{
    Y y;
    X* x = &amp;y;
    Y* py = &amp;y;

    cout &lt;&lt; &quot;Y*:: py zeigt auf Adresse: &quot; &lt;&lt; py &lt;&lt; endl;
    cout &lt;&lt; &quot;X*::  x zeigt auf Adresse: &quot; &lt;&lt; x &lt;&lt; endl;
    cout &lt;&lt; &quot;(Y*:: py == X*:: px) == &quot; &lt;&lt; ((py==x)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;

    ZA z;
    XA* xa = &amp;z;
    ZA* za = &amp;z;

    cout &lt;&lt; &quot;XA*::xa zeigt auf Adresse: &quot; &lt;&lt; xa &lt;&lt; endl;
    cout &lt;&lt; &quot;ZA*::za zeigt auf Adresse: &quot; &lt;&lt; za &lt;&lt; endl;
    cout &lt;&lt; &quot;(XA*::xa == ZA*::za) == &quot; &lt;&lt; ((xa==za)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;

    cout &lt;&lt; endl &lt;&lt; &quot;Soweit so klar! - ABER:&quot; &lt;&lt; endl &lt;&lt; endl;

    YA* ya = &amp;z;

    cout &lt;&lt; &quot;YA*::ya zeigt auf Adresse: &quot; &lt;&lt; ya &lt;&lt; endl;
    cout &lt;&lt; &quot;ZA*::za zeigt auf Adresse: &quot; &lt;&lt; za &lt;&lt; endl;
    cout &lt;&lt; &quot;(YA*::ya == ZA*::za) == &quot; &lt;&lt; ((ya==za)?&quot;Wahr&quot;:&quot;Unwahr&quot;)&lt;&lt; endl;
    cout &lt;&lt; endl;
    return 0;

}
</code></pre>
<p>Und der Output:</p>
<pre><code>Konstruktor X
Konstruktor Y
Y*:: py zeigt auf Adresse: 0x7fff12bb6340
X*::  x zeigt auf Adresse: 0x7fff12bb6340
(Y*:: py == X*:: px) == Wahr

Konstruktor XA
Konstruktor YA
Konstruktor ZA
XA*::xa zeigt auf Adresse: 0x7fff12bb6300
ZA*::za zeigt auf Adresse: 0x7fff12bb6300
(XA*::xa == ZA*::za) == Wahr

Soweit so klar! - ABER:

YA*::ya zeigt auf Adresse: 0x7fff12bb6304
ZA*::za zeigt auf Adresse: 0x7fff12bb6300
(YA*::ya == ZA*::za) == Wahr
</code></pre>
<p>Meine zwei Fragen:</p>
<ol>
<li>
<p>Warum ist das Adressen-Offset nur bei YA &lt;-&gt; ZA vorhanden? Und nicht bei allen anderen Pointern auch, aus dem Lehrbuch weiß ich das der Zeiger von YA auf ein Teilobjekt von ZA zeigt, aber genau das macht doch der Zeiger von XA auch, oder?</p>
</li>
<li>
<p>Und warum bei der Einfachvererbung solche Adress-Offsets nicht entstehen, wie beim Zeiger von X der auf ein Objekt von Y zeigt das von X abgeleitet wurde. Damit müsste X ja auch nur auf ein &quot;Teilobjekt&quot; von Y zeigen ?!</p>
</li>
</ol>
<p>Danke schon mal im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771636</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:00:22 GMT]]></title><description><![CDATA[<p>weil dein ZA so aussieht:</p>
<pre><code>/------\
|/----\|
||    ||
|| XA ||
||    ||
|\----/|
|      |
|/----\|
||    ||
|| YA ||
||    ||
|\----/|
|      |
|  ZA  |
|      |
\------/
</code></pre>
<p>wenn du jetzt auf den YA zugreifst, dann wird der pointer auf das YA teilobjekt<br />
gesetzt. beim vergleich wird der andere pointer ebenfalls konvertiert, und dann<br />
verglichen. daher gibt er &quot;wahr&quot; aus.</p>
<p>edit:</p>
<p>die umwandlung nach XA ändert die addresse nicht, nur nach YA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771645</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 14:59:43 GMT]]></title><description><![CDATA[<p>Hallo helferlein</p>
<p>Danke für deine Antwort, das mit dem inneren Aufbau des Obejkts habe ich verstanden, aber hast du auch meine Fragen am Schluss gelesen - die interessieren mich nämlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771648</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 14:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:11:50 GMT]]></title><description><![CDATA[<p>Zu 1.</p>
<p>Da ZA von den beiden Klassen XA und YA ableitet, so liegen diese ja hintereinander im Speicher (erst die Member von XA, dann die von YA und schließlich noch die von ZA selber - je nach Implementierung kann die Reihenfolge variieren). Wenn du mittels &quot;YA* ya = &amp;z;&quot; dir nur den YA-Anteil herausholst, so kriegst du halt den entsprechenden Zeiger mit dem Offset. Würde der Compiler den Basiszeiger des Objektes zurückgeben, so würden bei einem weiteren Memberzugriff (z.B. ya-&gt;j) intern auf ein falsches Member zugegriffen werden (und das wäre fatal!).</p>
<p>zu 2.<br />
Wie oben schon gesagt, liegt es an der Reihenfolge der Klassen. Bei Einfachvererbung kommt zuerst wohl die Basisklasse, dann erst die Member der abgeleiteten Klasse.<br />
Laß dir einfach mal &amp;y.i und &amp;y.j ausgeben...</p>
<p>P.S: Beim letzen Vergleich wird der Zeiger za erst in den Basisklassenzeiger YA* verwandlet (und dann erst verglichen), d.h. ya == (YA*)za</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771651</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:12:40 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Da ZA von den beiden Klassen XA und YA ableitet, so liegen diese ja hintereinander im Speicher (erst die Member von XA, dann die von YA und schließlich noch die von ZA selber - je nach Implementierung kann die Reihenfolge variieren). Wenn du mittels &quot;YA* ya = &amp;z;&quot; dir nur den YA-Anteil herausholst, so kriegst du halt den entsprechenden Zeiger mit dem Offset. Würde der Compiler den Basiszeiger des Objektes zurückgeben, so würden bei einem weiteren Memberzugriff (z.B. ya-&gt;j) intern auf ein falsches Member zugegriffen werden (und das wäre fatal!).</p>
</blockquote>
<p>Wenn das stimmen würde was du im letzten Satz sagst dann hätte ich jetzt das Problem, siehe meinen Output:</p>
<pre><code>XA*::xa zeigt auf Adresse: 0x7fff12bb6300
ZA*::za zeigt auf Adresse: 0x7fff12bb6300
</code></pre>
<p>XA und ZA zeigen auf das selbe Objekt und Adresse, was wird also aufgerufen was hinter diesen Adressen steht, XA oder ZA ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771666</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:30:00 GMT]]></title><description><![CDATA[<p>Vielleicht sollte ich mich einfacher ausdrücken, also:</p>
<pre><code>/------\ &lt;-- warum zeigt XA, ZA Pointer hier hin?
|/----\|
||    ||
|| XA ||
||    ||
|\----/|
|      |
|/----\|&lt;-- aber der ZY Pointer zeigt hier hin?
||    ||
|| YA ||
||    ||
|\----/|
|      |
|  ZA  |
|      |
\------/
</code></pre>
<pre><code>XA*::xa zeigt auf Adresse: 0x7fff12bb6300
ZA*::za zeigt auf Adresse: 0x7fff12bb6300

YA*::ya zeigt auf Adresse: 0x7fff12bb6304 &lt;-- Speicherstelle nach ZA und XA
</code></pre>
<p>Das versuche ich nämlich gerade zu verstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771686</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 15:50:04 GMT]]></title><description><![CDATA[<p>Der Groschen ist gefallen!</p>
<pre><code>/------\ &lt;--  XA, ZA zeigen auf Ihren Container-Anfang 
|/----\|             der bei XA und ZA gleich ist! (siehe Skizze)
||    ||
|| XA ||
||    ||
|\----/|
|      |
|/----\|&lt;--  der ZY Objekt-Container hat natürlich ein Offset
||    ||             zum Anfang, in der Breite von XA Daten-Elementen
|| YA ||             (sizeof(int) == 4)
||    ||
|\----/|
|      |
|  ZA  |
|      |
\------/
</code></pre>
<p>Manchmal dauert's bei mir halt ein bissel länger als bei Anderen.</p>
<p>Danke an Alle und ein besonderers Danke an helferlein für die aufschlussreiche Zeichnung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771705</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 15:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 16:46:58 GMT]]></title><description><![CDATA[<p>Und hier noch ein kleiner Nachtrag zur Einfachvererbung:</p>
<pre><code class="language-cpp">class X
{
  public: 
   int i;
};

class Y: public X
{
  public: 
   int j;
};

class Z: public Y
{
  public:
    int k;
};
</code></pre>
<pre><code>/---------\  &lt;--  X, Y und Z zeigen auf Ihren Container-Anfang
|/-------\|        der bei allen Klassen gleich ist! (siehe Skizze)
||/-----\||             
|||     |||
|||  X  |||       
|||     |||
||\-----/||
||       ||
||       || 
||   Y   ||  //  Y erbt von X und setzt X an seinen Adress-Anfang
||       ||
|\-------/|
|         |
|    Z    |  //  Z erbt die Container Struktur von Y und setzt diesen 
|         |      an seinen Adress-Anfang
\---------/
</code></pre>
<p>Also folglich wird bei der <strong>Einfachvererbung IMMER eine feste Adresse</strong> für ALLE Klassen-Zeiger dieses Objektes geben und damit sind verschiedene Adressen für ein und dasselbe Objekt nicht möglich.</p>
<p>Im Gegensatz zur <strong>Mehrfachvererbung</strong> wo <strong>verschiedene Adressen</strong> für ein und dasselbe Objekt <strong>möglich</strong> sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771735</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 16:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 17:28:34 GMT]]></title><description><![CDATA[<p>DeepCopy schrieb:</p>
<blockquote>
<p>Also folglich wird bei der <strong>Einfachvererbung IMMER eine feste Adresse</strong> für ALLE Klassen-Zeiger dieses Objektes geben und damit sind verschiedene Adressen für ein und dasselbe Objekt nicht möglich.</p>
</blockquote>
<p>Das ist möglich, aber nicht zwingend. Vom Verhalten einer einzigen Implementation zu verallgemeinern ist bestenfalls riskant.<br />
Wahr ist allerdings, dass eine Menge schlechter Code existiert, der von dieser Identität ausgeht, insofern ist nicht damit zu rechnen, das die Compiler an dieser Stelle verändert werden - effizient ist das Verfahren ja ohnehin.<br />
In jedem Falle ist es schlechter Stil, sich diese Identität ohne Not zu Nutze zu machen.</p>
<p>DeepCopy schrieb:</p>
<blockquote>
<p>Im Gegensatz zur <strong>Mehrfachvererbung</strong> wo <strong>verschiedene Adressen</strong> für ein und dasselbe Objekt <strong>möglich</strong> sind.</p>
</blockquote>
<p>Ein und dasselbe Objekt hat genau eine Adresse. Was abweichen kann, sind die Adressen eines Objektes und der darin enthaltenen Subobjekte (nur um die Terminologie klarzustellen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771765</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 03 Sep 2009 17:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem bei Adressen von vererbten Klassenzeigern on Thu, 03 Sep 2009 18:25:11 GMT]]></title><description><![CDATA[<p>Nur der Form halber:</p>
<p>DeepCopy schrieb:</p>
<blockquote>
<p>aus dem Lehrbuch weiß ich das der Zeiger von YA auf ein <strong>Teilobjekt</strong> von ZA zeigt</p>
</blockquote>
<p>Ansonsten gebe ich dir recht, ist wahrscheinlich voreilig zu behaupten das bei der Einfachvererbung alle (Teil-)Objekte an einer Adresse ausgerichtet werden.</p>
<p>Aber wie du schon sagtest:</p>
<p>camper schrieb:</p>
<blockquote>
<p>ist nicht damit zu rechnen, das die Compiler an dieser Stelle verändert werden</p>
</blockquote>
<p><em>879 Seiten komplexen C++ Standard um unsere Verträge und Programme zu schützen.</em> Da hat man noch genug Platz zum philosophieren!</p>
<p>In diesem Sinne<br />
Gruß DeepCopy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1771803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1771803</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Thu, 03 Sep 2009 18:25:11 GMT</pubDate></item></channel></rss>