<?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[Polymorphie: Parameter und Zeiger]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine grundsätzliche Frage zur Polymorphie:<br />
Angenommen, ich habe Klasse A und die von A abgeleitete Klasse B. Die Funktion F hat einen Parameter vom Typ A (kein Zeiger/Referenz!), und ich übergebe an F ein Objekt (kein Zeiger) vom Typ B. Meiner Meinung nach kann ich nun in Funktion F nicht mehr auf Membervariablen des übergebenen Parameters zugreifen, die nur in Klasse B, jedoch nicht in A definiert wurden (weil der Parameter alle Eigenschaften von B &quot;verloren&quot; hat und eine lokale Kopie des ganzen Objektes, also kein Zeiger, ist). Stimmt das, oder kann man durch irgendwelche cast operatoren doch auf die Member von B zugreifen?</p>
<p>Ich hoffe auf aufschlussreiche Antwort <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/185539/polymorphie-parameter-und-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 05:08:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185539.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Jun 2007 18:00:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:00:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine grundsätzliche Frage zur Polymorphie:<br />
Angenommen, ich habe Klasse A und die von A abgeleitete Klasse B. Die Funktion F hat einen Parameter vom Typ A (kein Zeiger/Referenz!), und ich übergebe an F ein Objekt (kein Zeiger) vom Typ B. Meiner Meinung nach kann ich nun in Funktion F nicht mehr auf Membervariablen des übergebenen Parameters zugreifen, die nur in Klasse B, jedoch nicht in A definiert wurden (weil der Parameter alle Eigenschaften von B &quot;verloren&quot; hat und eine lokale Kopie des ganzen Objektes, also kein Zeiger, ist). Stimmt das, oder kann man durch irgendwelche cast operatoren doch auf die Member von B zugreifen?</p>
<p>Ich hoffe auf aufschlussreiche Antwort <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/1314220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314220</guid><dc:creator><![CDATA[Lübecker]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:15:46 GMT]]></title><description><![CDATA[<p>jupp, lokale kopie des A teils von B. unmöglich, auf das originale A oder B zuzugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314232</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:17:49 GMT]]></title><description><![CDATA[<p>sollte im grunde kein problem sein. bei übergabe per value wir das objekt nicht plötzlich &quot;beschnitten&quot;. du musst es in der methode nur wieder als B interpretieren lassen.</p>
<p>so ist polymorphie allerdings eigentlich nicht gedacht. denn wenn deine methode ein objekt vom typ A erwartet (egal ob nu als pointer oder sonstwie), dann darf man als aufrufer erwarten, dass die methode ausschließlich methoden des typs A verwendet.</p>
<p>deine methode würde ja auch &quot;echte&quot; typen A akzeptieren. und wenn du die nach B castest, fliegt dir das programm um die ohren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314234</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:17:49 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:20:01 GMT]]></title><description><![CDATA[<p>Wenn du ein B als A übergibst passiert das gleiche wie wenn du eine Variable vom Typ A mit dem B konstruierst, also so:</p>
<pre><code class="language-cpp">B b;
A a(b); // ein neues A, initialisiert mit b
</code></pre>
<p>Das nennt man &quot;slicing&quot;, da b &quot;auseinandergeschnitten&quot; wird, und nur der &quot;A Teil&quot; von b nach a kopiert wird.</p>
<p>Über a (also in deinem Fall dann das Parameter einer Funktion) kannst du natürlich nicht auf b zugreifen, da a (nachdem es einmal konstuiert wurde) nichtmehr wissen kann wie es ursprünglich initialisiert wurde. Und da a nur ein A ist und kein B hat es natürlich auch keine Membervariablen/-funktionen von B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314235</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:20:01 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:21:09 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>sollte im grunde kein problem sein. bei übergabe per value wir das objekt nicht plötzlich &quot;beschnitten&quot;.</p>
</blockquote>
<p>Falsch. Per value heisst Kopie, und Kopie in dem Fall heisst slicing.<br />
Wer das A in der Funktion auf ein B&amp; castet greift auf uninitialisierten Müll zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314236</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:25:49 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>thordk schrieb:</p>
<blockquote>
<p>sollte im grunde kein problem sein. bei übergabe per value wir das objekt nicht plötzlich &quot;beschnitten&quot;.</p>
</blockquote>
<p>Falsch. Per value heisst Kopie, und Kopie in dem Fall heisst slicing.<br />
Wer das A in der Funktion auf ein B&amp; castet greift auf uninitialisierten Müll zu.</p>
</blockquote>
<p>da es um polymorphie geht, würde der OP in seiner funktion F ja auch hoffentlich dynamic_cast verwenden. und</p>
<pre><code class="language-cpp">void F (A a)
{
   dynamic_cast&lt;B&amp;&gt;(a);
}
</code></pre>
<p>würde _immer_ eine ausnahme werfen. die gefahr, auf uninitialisierten müll zuzugreifen, sehe ich allerdings nicht sofort. was ich allerdings nochmal betonen möchte, ist das hier bei der übergabe per-value nicht einmal der A Teil von dem B Objekt, das übergeben werden soll betroffen ist- nur lokale kopien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314240</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:37:51 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank für die zahlreichen Antworten!<br />
Dass ich in jedem Fall nur auf eine Kopie des übergebenen Objektes zugreifen kann ist mir klar; ich war mir nur nicht sicher wegen des &quot;slicing&quot;, denn in Java glaub ich würde das so nicht auftreten. Wie auch immer, danke für die Info, ist ein super Forum hier!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314254</guid><dc:creator><![CDATA[Luebecker]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 18:50:19 GMT]]></title><description><![CDATA[<p>In Java kann man ja auch keine Objekte by-value übergeben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314266</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 26 Jun 2007 18:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 20:32:58 GMT]]></title><description><![CDATA[<p>Und da es in Java AFAIK auch keine nicht virtuellen Methoden gibt tritt der Fall nichtmal dann auf wenn man eine &quot;klassisch implementierte&quot; clone() Methode verwendet... anders gesagt: solange man nicht explizit dafür sorgt dass es ein Problem gibt <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>
<p>BTW: kann man in Java eigentlich das implizite &quot;virtual&quot; umgehen? Also das was man in C++ als &quot;b-&gt;A::VirtFunc()&quot; schreibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314343</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Jun 2007 20:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 20:35:55 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und da es in Java AFAIK auch keine nicht virtuellen Methoden gibt tritt der Fall nichtmal dann auf wenn man eine &quot;klassisch implementierte&quot; clone() Methode verwendet... anders gesagt: solange man nicht explizit dafür sorgt dass es ein Problem gibt <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>
<p>BTW: kann man in Java eigentlich das implizite &quot;virtual&quot; umgehen? Also das was man in C++ als &quot;b-&gt;A::VirtFunc()&quot; schreibt?</p>
</blockquote>
<p>Imho war da was mit super. (oder wars Super. ?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314346</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Tue, 26 Jun 2007 20:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Tue, 26 Jun 2007 20:45:20 GMT]]></title><description><![CDATA[<p>geht mit super. super ist ne referenz auf die direkt übergeordnete klasse. ist aber nur innerhalb einer instanz verfügbar, nicht ins statischen methoden.</p>
<p>java kann abstrakte methoden haben, allerdings dürfen die keinen body besitzen. sind also sozusagen immer pure virtual.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314353</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Tue, 26 Jun 2007 20:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Wed, 27 Jun 2007 00:40:59 GMT]]></title><description><![CDATA[<p>Ok, Danke.<br />
Kann man auch &quot;super.super.super.foo()&quot; schreiben? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>EDIT: ich nehme an man kann dann von aussen aber nicht &quot;Object neuesFoo = m_foo.super.clone();&quot; oder sowas schreiben, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314431</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 27 Jun 2007 00:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie: Parameter und Zeiger on Wed, 27 Jun 2007 05:18:25 GMT]]></title><description><![CDATA[<p>über super hat man nur zugriff auf sichtbare felder und methoden des direkten vorgängers, staffeln lässt sich das nicht. gehört zum java klassenkonzept. und von aussen zugreifbar ist super auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314451</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Wed, 27 Jun 2007 05:18:25 GMT</pubDate></item></channel></rss>