<?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[Neues Object von abgeleitetem Typ erzeugen]]></title><description><![CDATA[<p>Folgende Problemstellung:</p>
<p>Ich habe eine Klasse A, von der eine weitere Klasse Aa erbt. Aus beiden Klassen können neue Objekte erzeugt werden. A besitzt jetzt eine Methode clone() welche als Rückgabewert ein neues Objekt vom Typ a bzw. Aa haben soll.</p>
<p>Meine einzige Idee dazu wäre, dass innerhalb von A::clone() überprüft wird, von welchem Typ this wirklich ist und dann entweder ein &quot;new A()&quot; oder ein &quot;new Aa()&quot; aufgerufen wird.</p>
<p>Meine Frage hier: geht das auch einfacher? sprich gibt es eine Möglichkeit, den new-Operator so aufzurufen, dass automatisch der Konstruktor des jeweils aktuellen this-Objektes verwendet wird?</p>
<p>Also in etwa so:</p>
<p>Ich habe ein Objekt vom Typ Aa und rufe clone() auf. Dieses clone ist zwar von A geerbt (aber nicht überschrieben), ruft aber trotzdem Aa() auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238899/neues-object-von-abgeleitetem-typ-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 17:07:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238899.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Apr 2009 06:06:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 06:06:23 GMT]]></title><description><![CDATA[<p>Folgende Problemstellung:</p>
<p>Ich habe eine Klasse A, von der eine weitere Klasse Aa erbt. Aus beiden Klassen können neue Objekte erzeugt werden. A besitzt jetzt eine Methode clone() welche als Rückgabewert ein neues Objekt vom Typ a bzw. Aa haben soll.</p>
<p>Meine einzige Idee dazu wäre, dass innerhalb von A::clone() überprüft wird, von welchem Typ this wirklich ist und dann entweder ein &quot;new A()&quot; oder ein &quot;new Aa()&quot; aufgerufen wird.</p>
<p>Meine Frage hier: geht das auch einfacher? sprich gibt es eine Möglichkeit, den new-Operator so aufzurufen, dass automatisch der Konstruktor des jeweils aktuellen this-Objektes verwendet wird?</p>
<p>Also in etwa so:</p>
<p>Ich habe ein Objekt vom Typ Aa und rufe clone() auf. Dieses clone ist zwar von A geerbt (aber nicht überschrieben), ruft aber trotzdem Aa() auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697010</guid><dc:creator><![CDATA[ElBlue]]></dc:creator><pubDate>Fri, 17 Apr 2009 06:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 06:21:43 GMT]]></title><description><![CDATA[<p>Mach clone() virtuell, dann wird doch automatisch das &quot;richtige&quot; clone() aufgerufen. Oder versteh ich Dein Problem nicht richtig?</p>
<p>In etwa so:</p>
<pre><code>class A
{
  ...
  A(A const &amp; a) {...} // copy ctor
  ...
  virtual A* clone() {return new A(*this);}
};

class Aa : public A
{
  ...
  Aa(Aa const &amp; a) {...} // copy ctor
  ...
  /*virtual*/ A* clone() {return new Aa(*this);}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1697013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697013</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Fri, 17 Apr 2009 06:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 07:28:12 GMT]]></title><description><![CDATA[<p>Ja, da gibt es ein Verständnisproblem: clone() soll nur in A existieren, nicht aber separat in Aa.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697040</guid><dc:creator><![CDATA[ElBlues]]></dc:creator><pubDate>Fri, 17 Apr 2009 07:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 07:29:46 GMT]]></title><description><![CDATA[<p>ElBlues schrieb:</p>
<blockquote>
<p>Ja, da gibt es ein Verständnisproblem: clone() soll nur in A existieren, nicht aber separat in Aa.</p>
</blockquote>
<p>warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697042</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 17 Apr 2009 07:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 08:06:12 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>ElBlues schrieb:</p>
<blockquote>
<p>Ja, da gibt es ein Verständnisproblem: clone() soll nur in A existieren, nicht aber separat in Aa.</p>
</blockquote>
<p>warum?</p>
</blockquote>
<p>Damit der gleiche Code, der sich nur im Konstruktor unterscheiden würde nicht mehrfach vorhanden ist?</p>
<p>Noch mal: ich weiß, dass es auch anders geht, z.B. clone() in jeder abgeleiteten Klasse anlegen und die Initialisierung in der vererbenden Klasse ausführen, aber das ist nicht meine Frage!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697064</guid><dc:creator><![CDATA[ElBlues]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Neues Object von abgeleitetem Typ erzeugen on Fri, 17 Apr 2009 11:10:54 GMT]]></title><description><![CDATA[<p>ElBlues schrieb:</p>
<blockquote>
<p>theta schrieb:</p>
<blockquote>
<p>ElBlues schrieb:</p>
<blockquote>
<p>Ja, da gibt es ein Verständnisproblem: clone() soll nur in A existieren, nicht aber separat in Aa.</p>
</blockquote>
<p>warum?</p>
</blockquote>
<p>Damit der gleiche Code, der sich nur im Konstruktor unterscheiden würde nicht mehrfach vorhanden ist?</p>
<p>Noch mal: ich weiß, dass es auch anders geht, z.B. clone() in jeder abgeleiteten Klasse anlegen und die Initialisierung in der vererbenden Klasse ausführen, aber das ist nicht meine Frage!</p>
</blockquote>
<p>Die Frage ist:<br />
Was willst Du clonen? Die jeweiligen abgeleiteten Klasse, oder immer nur die Basisklasse?<br />
Im Normalfall weiss die Basisklasse erstmal nichts von ihren abgeleiteten Klassen. Deshalb muss auch jede abgeleitete Klasse ihre eigene Clone-Mothode haben. Sonst würden ja die Elemente der abgeleiteten Klassen nicht mitgeclont werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697165</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 17 Apr 2009 11:10:54 GMT</pubDate></item></channel></rss>