<?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[Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich?]]></title><description><![CDATA[<p>Hallo,</p>
<p>warum ist Polymorphismus nur bei Referenzen und Zeigern möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311038/warum-polymorphismus-nur-bei-referenzen-zeigern-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 23:37:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311038.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Nov 2012 14:56:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 14:56:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>warum ist Polymorphismus nur bei Referenzen und Zeigern möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274503</guid><dc:creator><![CDATA[vbcvbc]]></dc:creator><pubDate>Sun, 25 Nov 2012 14:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 14:59:33 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Object_slicing" rel="nofollow">http://en.wikipedia.org/wiki/Object_slicing</a></p>
<p>Ist allerdings nur eine Faustregel, man kann Polymorphismus auch ohne Referenzen/Smartpointer machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274504</guid><dc:creator><![CDATA[hamslice]]></dc:creator><pubDate>Sun, 25 Nov 2012 14:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:00:43 GMT]]></title><description><![CDATA[<p>Wenn das abgeleitete Objekt größer ist, kann es nicht in dem vom Compiler reservierten Speicher für das Basisklassenobjekt untergebracht werden -&gt; Verweis nötig -&gt; Referenz oder Zeiger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274507</guid><dc:creator><![CDATA[nix_]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:04:09 GMT]]></title><description><![CDATA[<p>nix_ schrieb:</p>
<blockquote>
<p>Wenn das abgeleitete Objekt größer ist, kann es nicht in dem vom Compiler reservierten Speicher für das Basisklassenobjekt untergebracht werden</p>
</blockquote>
<p>Falsch, der Compiler macht das ohne zu meckern. Und das Problem tritt auch auf, wenn das abgeleitete Objekt gleich viel/weniger Speicher als die Basisklasse benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274508</guid><dc:creator><![CDATA[hamslice]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:10:12 GMT]]></title><description><![CDATA[<p>So ein Blödsinn.<br />
Das ist der Grund warum Polymorphie ohne Zeiger/Referenzen i.A. nicht möglich ist. Willst Du vielleicht einen Compiler der nur bei manchen Subklassentypen (die eben nicht größer sind als die Basisklasse) polymorphe Methodenaufrufe erlaubt? Nein, also ist es gerenell nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274510</guid><dc:creator><![CDATA[nix_]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:17:45 GMT]]></title><description><![CDATA[<p>Die Frage ergibt für mich keinen Sinn. Ich würde gerne mal ein Programm sehen, das sich nicht so verhält wie erwartet, weil Polymorphismus angeblich nur mit Pointern/Referenzen funktioniert.</p>
<p>edit: Zum Slicing:</p>
<pre><code class="language-cpp">Derived d;
Base b(d);  // Slicing
</code></pre>
<p>b ist ein Objekt vom Typ Base, es wird über den Kopierkonstruktor von Base erzeugt. Mit der Größe der Objekte hat das überhaupt nichts zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274513</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:19:30 GMT]]></title><description><![CDATA[<p>@nix_: Also dürfte laut dir das nicht kompilieren?</p>
<pre><code class="language-cpp">struct A {
  A(int a=0) : a(a) {}
  int a;
};

struct B : A {
  B() : A(1), b(1) {}
  int b;
};

void f(A a) { std::cout &lt;&lt; a.a &lt;&lt; '\n'; }

int main()
{
  B b;
  f(b);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2274515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274515</guid><dc:creator><![CDATA[hamslice]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 15:20:47 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Die Frage ergibt für mich keinen Sinn. Ich würde gerne mal ein Programm sehen, das sich nicht so verhält wie erwartet, weil Polymorphismus angeblich nur mit Pointern/Referenzen funktioniert.</p>
</blockquote>
<p><a href="http://ideone.com/MxDztc" rel="nofollow">code</a></p>
<p>was erwartet man?<br />
ok als erfahrener erwartet man genau die ausgabe</p>
<p>aber als anfänger denkt man, es kommt immer B raus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274516</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 25 Nov 2012 15:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 17:46:46 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Die Frage ergibt für mich keinen Sinn. Ich würde gerne mal ein Programm sehen, das sich nicht so verhält wie erwartet, weil Polymorphismus angeblich nur mit Pointern/Referenzen funktioniert.</p>
</blockquote>
<p>Hier ein Beispiel für meine Frage. Warum ist es nicht möglich, polymorphes Verhalten an der Stelle (1) zu haben? Bei einer Referenz (2) sag ich ja auch, dass der statische Typ B&amp; ist und trotzdem wird der dynamische Typ verwendet, nämlich der Typ, auf den die Referenz tatsächlich verweist.<br />
Warum ist das nicht auch an der Stelle (1) möglich? Weil dadurch immer der Copy CTOR/operator= aufgerufen wird, und somit der Typ bei einer Variable vom Typ B immer B ist und niemals D sein kann?</p>
<pre><code>struct B
{
    virtual void print()
    {
        cout&lt;&lt;&quot;Base&quot;&lt;&lt;endl;
    }
};

struct D : public B
{
    virtual void print()
    {
        cout&lt;&lt;&quot;Derived&quot;&lt;&lt;endl;
    }
};

int main()
{

    B b;
    D d;

    // Variablen von Typ B (1)
    B vb=b;
    B vd=d;

    vb.print(); //-&gt; Base
    vd.print(); //-&gt; Base

    // Variablen vom Typ B&amp; (2)
    B&amp; rb=b;
    B&amp; rd=d;

    rb.print(); //-&gt; Base
    rd.print(); //-&gt; Derived

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2274567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274567</guid><dc:creator><![CDATA[vbcvbc]]></dc:creator><pubDate>Sun, 25 Nov 2012 17:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 17:56:45 GMT]]></title><description><![CDATA[<p>vbcvbc schrieb:</p>
<blockquote>
<p>Weil dadurch immer der Copy CTOR/operator= aufgerufen wird, und somit der Typ bei einer Variable vom Typ B immer B ist und niemals D sein kann?</p>
</blockquote>
<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274569</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sun, 25 Nov 2012 17:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 18:12:07 GMT]]></title><description><![CDATA[<p>Dass da der Kopierkonstruktor benutzt wird, ist eher eine Folge und nicht die Ursache. Es ist schlicht und einfach so, dass das ein Objekt vom Typ B ist und nichts, was aussieht wie B und unter der Haube was anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274571</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 25 Nov 2012 18:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 18:15:06 GMT]]></title><description><![CDATA[<p><code>vb</code> ist eine Variable vom Typ B. Dass dieser über eine Instanz von einer abgeleiteten Klasse initialisiert wurde, ist da egal. Der Typ bleibt B.</p>
<p>Eine Referenz oder ein Zeiger verweisen auf ein Objekt. Die Referenz oder der Zeiger weiß, dass das referenzierte Objekt vom Typ B ist. Und eine Instanz der abgeleiteten Klasse D ist ja auch vom Typ B, da es davon abgeleitet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274573</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Sun, 25 Nov 2012 18:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Warum Polymorphismus nur bei Referenzen&#x2F;Zeigern möglich? on Sun, 25 Nov 2012 20:40:18 GMT]]></title><description><![CDATA[<p>danke für die antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274612</guid><dc:creator><![CDATA[vbcvbc]]></dc:creator><pubDate>Sun, 25 Nov 2012 20:40:18 GMT</pubDate></item></channel></rss>