<?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[Kopiermethode virtualisieren?]]></title><description><![CDATA[<p>ich nehm immer Objekt-Zeiger die auf geerbte Objekte zeigen.</p>
<p>Die Werte von geerbten Objekte werden aber nicht mitkopiert.</p>
<p>Ich versuchte mit</p>
<pre><code class="language-cpp">virtual Object &amp; operator=(const Object &amp; ref)
</code></pre>
<p>die geerbten Klasse wird so deklariert: class ObWave : public Object<br />
Nun darf ich die Deklarationen von Kopiermethode Object nicht in ObWave ändern.</p>
<pre><code class="language-cpp">Object &amp; operator=(const Object &amp; ref)
</code></pre>
<p>Wie hol ich hier die geerbten Werte aus ref? Muss ich hier upcast nehmen? Wenn ja, wie innerhalb Kopiermethode?</p>
<p>das geht wohl nicht wegen const?</p>
<pre><code class="language-cpp">this-&gt;steps = static_cast&lt;ObWave*&gt;(&amp;ref)-&gt;getSteps();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/285532/kopiermethode-virtualisieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 06:53:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285532.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Apr 2011 10:48:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 10:48:52 GMT]]></title><description><![CDATA[<p>ich nehm immer Objekt-Zeiger die auf geerbte Objekte zeigen.</p>
<p>Die Werte von geerbten Objekte werden aber nicht mitkopiert.</p>
<p>Ich versuchte mit</p>
<pre><code class="language-cpp">virtual Object &amp; operator=(const Object &amp; ref)
</code></pre>
<p>die geerbten Klasse wird so deklariert: class ObWave : public Object<br />
Nun darf ich die Deklarationen von Kopiermethode Object nicht in ObWave ändern.</p>
<pre><code class="language-cpp">Object &amp; operator=(const Object &amp; ref)
</code></pre>
<p>Wie hol ich hier die geerbten Werte aus ref? Muss ich hier upcast nehmen? Wenn ja, wie innerhalb Kopiermethode?</p>
<p>das geht wohl nicht wegen const?</p>
<pre><code class="language-cpp">this-&gt;steps = static_cast&lt;ObWave*&gt;(&amp;ref)-&gt;getSteps();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2052883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052883</guid><dc:creator><![CDATA[xBlackKnightx]]></dc:creator><pubDate>Fri, 22 Apr 2011 10:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 11:16:16 GMT]]></title><description><![CDATA[<p>static_cast ist auch nicht der geeignete konvertierungsoperator für vererbungsoperationen sondern dynamic_cast...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052898</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 22 Apr 2011 11:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 13:37:25 GMT]]></title><description><![CDATA[<p>&quot;dynamic_cast&quot; kann nicht verwendet werden, um &quot;const Object *&quot; in &quot;ObWave *&quot; zu konvertieren.</p>
<p>einfach const wegmachen? ich frage mich eigentlich wie man damit sonst umgeht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052959</guid><dc:creator><![CDATA[xBlackKnightx]]></dc:creator><pubDate>Fri, 22 Apr 2011 13:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 13:40:26 GMT]]></title><description><![CDATA[<p>ne, const dazumachen</p>
<pre><code class="language-cpp">this-&gt;steps = dynamic_cast&lt;ObWave const*&gt;(&amp;ref)-&gt;getSteps();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2052961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052961</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 22 Apr 2011 13:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 13:42:58 GMT]]></title><description><![CDATA[<p>xBlackKnightx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Object &amp; operator=(const Object &amp; ref)
</code></pre>
<p>Wie hol ich hier die geerbten Werte aus ref? Muss ich hier upcast nehmen? Wenn ja, wie innerhalb Kopiermethode?</p>
</blockquote>
<p>Was genau treibst du denn da? Die Tatsache dass du dir überhaupt diese Frage stellst lässt sehr stark vermuten dass es nichts Gutes ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052963</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 22 Apr 2011 13:42:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 13:54:40 GMT]]></title><description><![CDATA[<p>Du kannst die Klasse eines Objektes nicht verändern, nachdem es einmal erstellt ist. Dementsprechend wird dich operator= hier nicht weiterbringen - wenn Klassen B und C von A erben, wie sollen denn dann die Werte eines Objekts vom Typ B in eins vom Typ C geschrieben werden?</p>
<p>Wenn du mit Zeigern (bzw. hoffentlich Smart-Pointern) arbeitest, ist die übliche Methode, den Klassen eine virtuelle clone-Methode der Form</p>
<pre><code class="language-cpp">virtual classname *clone() const { return new classname(*this); }
</code></pre>
<p>zu geben. Auf die Art lässt sich</p>
<pre><code class="language-cpp">std::auto_ptr&lt;A&gt; ptr_d = new B;
std::auto_ptr&lt;A&gt; ptr_s = new C;

// ...

ptr_d = ptr_s-&gt;clone();

// ptr_d zeigt jetzt auf ein Objekt vom Typ C
</code></pre>
<p>schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052965</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 22 Apr 2011 13:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 15:20:53 GMT]]></title><description><![CDATA[<p>hm daran hab ich nicht gedacht.<br />
hatte so geschrieben</p>
<pre><code class="language-cpp">Object &amp; operator=( const Object &amp; ref) {
		Object::operator=(ref);
		this-&gt;steps = dynamic_cast&lt;ObWave const*&gt;(&amp;ref)-&gt;getSteps();
		this-&gt;wavelenght = dynamic_cast&lt;ObWave const*&gt;(&amp;ref)-&gt;getWavelenght();
        return *this;
    }
</code></pre>
<p>dass mit C und B nicht geht habe ich noch nicht probiert<br />
Leider hab ich noch nie mit smart-pointern gearbeitet.</p>
<p>hoffentlich ist std::auto_ptr plattformunabhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052995</guid><dc:creator><![CDATA[xBlackKnightx]]></dc:creator><pubDate>Fri, 22 Apr 2011 15:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 16:00:49 GMT]]></title><description><![CDATA[<p>Ja, std::auto_ptr ist im Standard definiert, aber ich habe gehört, daß es auf lange Sicht ersetzt werden soll.</p>
<p>Zu deinem Code: Du solltest eventuell abfangen, ob der Cast wirklich funktioniert hat:</p>
<pre><code class="language-cpp">Object &amp; operator=( const Object &amp; ref) {
  Object::operator=(ref);
  const ObWave* src = dynamic_cast&lt;const ObWave*&gt;(&amp;ref)
  if(src)
  {
    this-&gt;steps = src-&gt;getSteps();
    this-&gt;wavelenght = src-&gt;getWavelenght();
    return *this;
  }
  else
  {
    //Fehlerbehandlung - das übergebene Objekt war kein ObWave
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2053015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053015</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Apr 2011 16:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 16:33:13 GMT]]></title><description><![CDATA[<p>Ja, noch ist mein Programm schlicht, müsste immer funktionieren. Im Maincode ist so ein Kopiermechanismus, welcher mir allerdings auch nicht so gefällt. Wenn jedesmal ein neues geerbtes Objekt hinzukommt, muss diese else-if Anweisung verlängert werden.</p>
<pre><code class="language-cpp">struct ObPointer {
	Object *objp;
};
</code></pre>
<pre><code class="language-cpp">Object *obj_copy;

	obj_copy = QVariant(parent_item-&gt;data(ObjectRole)).value&lt;ObPointer&gt;().objp; // Qt Zeile (anderes Thema)

	ObPointer obp;

	if (obj_copy-&gt;type() == 1)
		obp.objp = new ObWave();
	else if (obj_copy-&gt;type() == 2)
		obp.objp = new ObSpiral();
	else
		obp.objp = new Object();

	*obp.objp = *obj_copy;
</code></pre>
<p>glaub mit clone wäre besser. aber dann müsste ich eher shared pointer nehmen, weil bestimmt mehrere Zeiger auf ein object gezeigt werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053031</guid><dc:creator><![CDATA[xBlackKnightx]]></dc:creator><pubDate>Fri, 22 Apr 2011 16:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 16:31:50 GMT]]></title><description><![CDATA[<p>Die Lösung dafür wurde doch schon genannt: Spendiere deinen Klassen eine eigene Clone()-Methode, die jeweils eine passende Kopie des Objekts erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053034</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Apr 2011 16:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 16:34:17 GMT]]></title><description><![CDATA[<p>ja dachte ich, siehe edit oben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053035</guid><dc:creator><![CDATA[xBlackKnightx]]></dc:creator><pubDate>Fri, 22 Apr 2011 16:34:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 18:37:18 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Zu deinem Code: Du solltest eventuell abfangen, ob der Cast wirklich funktioniert hat:<br />
(...)</p>
</blockquote>
<p>Ja, sollte er. Geht aber auch einfacher:</p>
<pre><code class="language-cpp">Object &amp; operator=( const Object &amp; ref) {
  Object::operator=(ref);
  const ObWave&amp; src = dynamic_cast&lt;const ObWave&amp;&gt;(ref);
  this-&gt;steps = src.getSteps();
  this-&gt;wavelenght = src.getWavelenght();
  return *this;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053055</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 22 Apr 2011 18:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 18:40:19 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ja, sollte er. Geht aber auch einfacher:</p>
</blockquote>
<p>Stimmt, aber ganz so extrem wollte ich die Aufgabe auch nicht lösen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2053056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053056</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Apr 2011 18:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiermethode virtualisieren? on Fri, 22 Apr 2011 19:28:09 GMT]]></title><description><![CDATA[<p>So extrem finde ich das jetzt nicht.<br />
OK, wenn man möchte dass ein von <code>std::logic_error</code> oder <code>std::runtime_error</code> abgeleiteter Fehler fliegt, dann ist es nicht gut.<br />
Ansonsten halte ich <code>std::bad_cast</code> für ausreichend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2053071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2053071</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 22 Apr 2011 19:28:09 GMT</pubDate></item></channel></rss>