<?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[clone() implementieren?]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ungefähr folgendes `Gebilde´, nur mit dem Unterschied das die Models (noch) kein clone() haben sondern andere Methoden..</p>
<pre><code class="language-cpp">class abstract_model {
  virtual ~abstract_model() = 0;
  virtual abstract_model *clone();
};

class concrete_model_a : public abstract_model {
  virtual concrete_model_a *clone();
};

class concrete_model_b : public abstract_model {
  virtual concrete_model_b *clone();
};

class manager {
  manager() : model_(0) {
  }

  manager &amp; operator =(manager const &amp; m) {
    if(model_)
      delete model_;
    model_ = m.model_-&gt;clone();
  }

  abstract_model *model_;
};
</code></pre>
<p>Mein Problem ist jetzt das ich beim Copy-Constructor oder op= bei der manager-Klasse nicht genau weiß welches model ich jetzt kopieren muss.<br />
Deshalb dachte ich das ich eine virtuelle clone() Methode, ähnlich wie in Java, schreibe. Ich weiß nur leider nicht wie ich clone() so schreibe das sie in der Klasse-Hierarchie von unten nach oben durchläuft. (abstract_model-&gt;clone() muss auch aufgerufen werden)</p>
<p>Oder gibt es vielleicht sogar eine andere (bessere) Möglichkeit? <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/133005/clone-implementieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 17:06:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133005.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jan 2006 17:25:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to clone() implementieren? on Sat, 14 Jan 2006 17:25:04 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ungefähr folgendes `Gebilde´, nur mit dem Unterschied das die Models (noch) kein clone() haben sondern andere Methoden..</p>
<pre><code class="language-cpp">class abstract_model {
  virtual ~abstract_model() = 0;
  virtual abstract_model *clone();
};

class concrete_model_a : public abstract_model {
  virtual concrete_model_a *clone();
};

class concrete_model_b : public abstract_model {
  virtual concrete_model_b *clone();
};

class manager {
  manager() : model_(0) {
  }

  manager &amp; operator =(manager const &amp; m) {
    if(model_)
      delete model_;
    model_ = m.model_-&gt;clone();
  }

  abstract_model *model_;
};
</code></pre>
<p>Mein Problem ist jetzt das ich beim Copy-Constructor oder op= bei der manager-Klasse nicht genau weiß welches model ich jetzt kopieren muss.<br />
Deshalb dachte ich das ich eine virtuelle clone() Methode, ähnlich wie in Java, schreibe. Ich weiß nur leider nicht wie ich clone() so schreibe das sie in der Klasse-Hierarchie von unten nach oben durchläuft. (abstract_model-&gt;clone() muss auch aufgerufen werden)</p>
<p>Oder gibt es vielleicht sogar eine andere (bessere) Möglichkeit? <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/966565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966565</guid><dc:creator><![CDATA[Konrad]]></dc:creator><pubDate>Sat, 14 Jan 2006 17:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to clone() implementieren? on Sat, 14 Jan 2006 18:13:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">concrete_model_a* concrete_model_a::clone()
{
    return new concrete_model_a (*this);
}
concrete_model_b* concrete_model_b::clone()
{
    return new concrete_model_b (*this);
}
</code></pre>
<p>Dieses Vorgehen benötigt einen funktionsfähigen Kopierkonstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/966614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966614</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 14 Jan 2006 18:13:33 GMT</pubDate></item></channel></rss>