<?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 problem]]></title><description><![CDATA[<p>hi ihrs,</p>
<p>da ich früher in java gearbeitet habe, hab ich nun ein kleines polymorphie problem. es geht um folgendes:<br />
- es existiert objekt A als virtuelles objekt mit funktion set(i)<br />
- es existieren abgleitete objekte von A mit den Namen B,C,D,.... welche die funktion set(i) überladen</p>
<p>nun möchte ich ein allgemeines suchbaum objekt bauen, welches allgemein auf jeden objekt vom typ A oder einer seiner unterobjekte funktioniert. in jedem knoten des suchbaums wird die set funktion aufgerufen, und es soll logischerweise immer die funktion des tiefsten typen aufgerufen werden, also wenn ich den suchbaum für ein objekt vom typ C benutze, dann soll set(i) von C aufgerufen werden.<br />
zusätzlich dazu muß das objekt kopiert werden, bevor ich den suchbaum rekursiv aufrufen kann.</p>
<p>mir ist bisher nur eingefallen im suchbaum objekt mit einem zeiger auf objekttyp A zu arbeiten und für jeden rekursiven aufruf das objekt zu dereferenzieren, kopieren und einen neuen zeiger drauf zu setzen.</p>
<p>hat jemand ne tolle idee, oder kann mir ein paar zeilen pseudo-code schreiben...<br />
Vielen Dank!<br />
Sebastian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162005/polymorphie-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 01:26:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162005.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Oct 2006 13:28:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to polymorphie problem on Fri, 13 Oct 2006 13:28:19 GMT]]></title><description><![CDATA[<p>hi ihrs,</p>
<p>da ich früher in java gearbeitet habe, hab ich nun ein kleines polymorphie problem. es geht um folgendes:<br />
- es existiert objekt A als virtuelles objekt mit funktion set(i)<br />
- es existieren abgleitete objekte von A mit den Namen B,C,D,.... welche die funktion set(i) überladen</p>
<p>nun möchte ich ein allgemeines suchbaum objekt bauen, welches allgemein auf jeden objekt vom typ A oder einer seiner unterobjekte funktioniert. in jedem knoten des suchbaums wird die set funktion aufgerufen, und es soll logischerweise immer die funktion des tiefsten typen aufgerufen werden, also wenn ich den suchbaum für ein objekt vom typ C benutze, dann soll set(i) von C aufgerufen werden.<br />
zusätzlich dazu muß das objekt kopiert werden, bevor ich den suchbaum rekursiv aufrufen kann.</p>
<p>mir ist bisher nur eingefallen im suchbaum objekt mit einem zeiger auf objekttyp A zu arbeiten und für jeden rekursiven aufruf das objekt zu dereferenzieren, kopieren und einen neuen zeiger drauf zu setzen.</p>
<p>hat jemand ne tolle idee, oder kann mir ein paar zeilen pseudo-code schreiben...<br />
Vielen Dank!<br />
Sebastian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1154112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154112</guid><dc:creator><![CDATA[sebastian_v_b]]></dc:creator><pubDate>Fri, 13 Oct 2006 13:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to polymorphie problem on Fri, 13 Oct 2006 16:12:29 GMT]]></title><description><![CDATA[<p>Mach die Funktion set virtuell, dann hast du das Problem schon gelöst.</p>
<p>Zu letzterem um eine Kopie von einem abgeleiteten Typ zu Erstellen spendierst du der Hierarchie am einfachsten eine clone()-Methode welche eine Kopie zum richtigen Typ erstellt. So kannst du die Kopie erstellen ohne den Typ kennen zu müssen.</p>
<pre><code class="language-cpp">class A
{
public:
  virtual void set( int i ) = 0; //pure virtual -&gt;muss überschrieben werden
  virtual A&amp; clone() = 0; //dito

  virtual ~A(); //nicht vergessen den Destruktor virtuell zu machen!
};

class B : public A
{
public:
  virtual void set( int i ){}
  virtual B&amp; clone()
  {
     return *( new B() );
  }
}; 

//Anwendung
B b;
A&amp; a = b;

B&amp; copyOfB = a.clone(); //erzeugt ein B da a auf ein B verweist
A* pointerToCopy = &amp;copyOfB;

pointerToCopy-&gt;set( 0 );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1154270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154270</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Fri, 13 Oct 2006 16:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to polymorphie problem on Fri, 13 Oct 2006 17:27:29 GMT]]></title><description><![CDATA[<p>sebastian_v_b schrieb:</p>
<blockquote>
<p>da ich früher in java gearbeitet habe, hab ich nun ein kleines polymorphie problem.</p>
</blockquote>
<p>Wie hättest du's denn in Java gemacht? Ich seh da nämlich keinen allzu großen Unterschied...</p>
<p>lolz' Idee ist schon ganz gut, auch wenn seine Implementierung noch nicht ganz hinhaut.</p>
<pre><code class="language-cpp">class A
{
public:
  virtual A* clone() const = 0;
  // oder ggf.
  virtual A* clone() const { return new A(*this); }
};

class B
{
public:
  virtual B* clone() const { return new B(*this); }
};
</code></pre>
<p>Das <em>set(i)</em> hab ich mal ausgelassen, jetzt hast du das Keyword <em>virtual</em> ja mittlerweile gesehen.</p>
<p>Ach ja, dieser Suchbaum - ist das eine Übung oder so? Ansonsten bringt dich <em><a href="http://www.sgi.com/tech/stl/set.html" rel="nofollow">std::set</a></em> evtl. auch weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1154316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154316</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 13 Oct 2006 17:27:29 GMT</pubDate></item></channel></rss>