<?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[Virtuelle clone-Methode]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Methode clone(), die einen Pointer auf eine Kopie des aktuellen Objekts zurückgeben soll. Dies soll mit Polymorphie funktionieren.</p>
<p>Eltern-Klasse:</p>
<pre><code class="language-cpp">virtual Query_Base* clone() 
{return 0;}
</code></pre>
<p>Vererbte Klasse:</p>
<pre><code class="language-cpp">WordQuery* WordQuery::clone() const
{
	WordQuery* i = new WordQuery;
	i-&gt;query_text = query_text;
	return i;
}
</code></pre>
<p>Rufe ich also clone() auf, durch einen Query_Base-Pointer, der auf ein WordQuery-Objekt zeigt, so wird die Query_Base-Version der Methode ausgeführt, die immer 0 zurückgibt.<br />
Da die Methode ja virtual ist, hätte ich erwartet, dass die in der vererbten Klasse veränderte Version genutzt wird, was aber nicht der Fall ist.</p>
<p>Ist das ein Verständnisfehler von mir oder ein Code-Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305049/virtuelle-clone-methode</link><generator>RSS for Node</generator><lastBuildDate>Wed, 24 Jun 2026 15:03:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305049.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jun 2012 19:54:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle clone-Methode on Tue, 19 Jun 2012 19:54:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Methode clone(), die einen Pointer auf eine Kopie des aktuellen Objekts zurückgeben soll. Dies soll mit Polymorphie funktionieren.</p>
<p>Eltern-Klasse:</p>
<pre><code class="language-cpp">virtual Query_Base* clone() 
{return 0;}
</code></pre>
<p>Vererbte Klasse:</p>
<pre><code class="language-cpp">WordQuery* WordQuery::clone() const
{
	WordQuery* i = new WordQuery;
	i-&gt;query_text = query_text;
	return i;
}
</code></pre>
<p>Rufe ich also clone() auf, durch einen Query_Base-Pointer, der auf ein WordQuery-Objekt zeigt, so wird die Query_Base-Version der Methode ausgeführt, die immer 0 zurückgibt.<br />
Da die Methode ja virtual ist, hätte ich erwartet, dass die in der vererbten Klasse veränderte Version genutzt wird, was aber nicht der Fall ist.</p>
<p>Ist das ein Verständnisfehler von mir oder ein Code-Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225164</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Tue, 19 Jun 2012 19:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle clone-Methode on Tue, 19 Jun 2012 20:06:33 GMT]]></title><description><![CDATA[<p><code>clone() const</code> ist etwas anderes als <code>clone()</code> ohne <code>const</code> .<br />
Außerdem ist der Rückgabetyp falsch und die Methode sollte abstrakt sein.<br />
Die Implementation der Methode ist nicht korrekt, weil im Fall einer Ausnahme bei der Zuweisung des Elementes das geklonte Objekt verlorengeht. Du solltest einen Kopierkonstruktor verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225167</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 19 Jun 2012 20:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle clone-Methode on Tue, 19 Jun 2012 20:11:27 GMT]]></title><description><![CDATA[<blockquote>
<p>clone() const ist etwas anderes als clone() ohne const.</p>
</blockquote>
<p>Oh Mann...<br />
Danke.</p>
<blockquote>
<p>Außerdem ist der Rückgabetyp falsch und die Methode sollte abstrakt sein.</p>
</blockquote>
<p>Das hatte ich geändert, da ich vorher einen Compiler-Fehler gemeldet bekam.</p>
<blockquote>
<p>Die Implementation der Methode ist nicht korrekt, weil im Fall einer Ausnahme bei der Zuweisung des Elementes das geklonte Objekt verlorengeht. Du solltest einen Kopierkonstruktor verwenden.</p>
</blockquote>
<p>Hm... macht Sinn <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/2225173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225173</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Tue, 19 Jun 2012 20:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle clone-Methode on Wed, 20 Jun 2012 07:41:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Außerdem ist der Rückgabetyp falsch und die Methode sollte abstrakt sein.</p>
</blockquote>
<p>Das mit dem Rückgabetypen geht in Ordnung. Nennt sich Kovarianz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225264</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 20 Jun 2012 07:41:57 GMT</pubDate></item></channel></rss>