<?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[kopierklasse]]></title><description><![CDATA[<p>ist folgendes möglich</p>
<pre><code class="language-cpp">template &lt;class t_this, class t_source&gt;
class ccopy
{
	public:
		ccopy() {};
		ccopy(const t_source&amp; src) {copy(src)};
		virtual t_this&amp; copy(const t_source&amp; src) = 0;
		t_this&amp; operator = (const t_source&amp; src) {return copy(src)};
};
</code></pre>
<p>um diese klasse als basis für andere klassen zu nehmen, damit ich da nur noch die copy()-funktion definieren muss und der &quot;copy&quot;-construkor und =operator schon definiet sind?</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">template &lt;class t&gt;
class myclass : virtual public ccopy&lt;myclass&lt;t&gt;, myclass&lt;t&gt;&gt;, virtual public ccopy&lt;myclass&lt;t&gt;, t&gt;
{
	private:
		t data;
	public:
		myclass&lt;t&gt;&amp; copy(const myclass&lt;t&gt;&amp; src) {data = src.data};
		myclass&lt;t&gt;&amp; copy(const t&amp; src) {data = src};
};

int main()
{
//sollte jetzt alles durch die basis-klasse ccopy definiert sein
	myclass&lt;int&gt; a(2);
	myclass&lt;int&gt; b(a);
	myclass&lt;int&gt; c(0);
	c = b;
	return 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/183135/kopierklasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 03:26:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183135.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Jun 2007 22:24:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 07:51:37 GMT]]></title><description><![CDATA[<p>ist folgendes möglich</p>
<pre><code class="language-cpp">template &lt;class t_this, class t_source&gt;
class ccopy
{
	public:
		ccopy() {};
		ccopy(const t_source&amp; src) {copy(src)};
		virtual t_this&amp; copy(const t_source&amp; src) = 0;
		t_this&amp; operator = (const t_source&amp; src) {return copy(src)};
};
</code></pre>
<p>um diese klasse als basis für andere klassen zu nehmen, damit ich da nur noch die copy()-funktion definieren muss und der &quot;copy&quot;-construkor und =operator schon definiet sind?</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">template &lt;class t&gt;
class myclass : virtual public ccopy&lt;myclass&lt;t&gt;, myclass&lt;t&gt;&gt;, virtual public ccopy&lt;myclass&lt;t&gt;, t&gt;
{
	private:
		t data;
	public:
		myclass&lt;t&gt;&amp; copy(const myclass&lt;t&gt;&amp; src) {data = src.data};
		myclass&lt;t&gt;&amp; copy(const t&amp; src) {data = src};
};

int main()
{
//sollte jetzt alles durch die basis-klasse ccopy definiert sein
	myclass&lt;int&gt; a(2);
	myclass&lt;int&gt; b(a);
	myclass&lt;int&gt; c(0);
	c = b;
	return 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1296949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296949</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 02 Jun 2007 07:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Fri, 01 Jun 2007 22:50:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void main()
</code></pre>
<p>bitte nicht</p>
<pre><code class="language-cpp">myclass&lt;int&gt; a(2);
</code></pre>
<p>Frag deinen Compiler.</p>
<pre><code class="language-cpp">ccopy(const t_source&amp; src) {copy(src)};
        virtual t_this&amp; copy(const t_source&amp; src) = 0;
</code></pre>
<p>So geht es nicht. Innerhalb es Funktionsrumpfes eines Konstruktors existiert nur die Klasse selbst schon (jedenfalls alle member und Basisklassenobjekte, bestimmte Invarianten sind möglicherweise noch nicht gegeben) - nicht aber der Teil, der zur abgeleiteten Klasse gehört. Mithin sind hier statischer und dynamischer Typ identisch und ein dynamischer Aufruf einer virtuellen Funktion findet dann konsequenterweise die Implementation in der Klasse, dessen Konstruktor aufgerufen wird. Jedenfalls wäre es so, wenn copy nicht rein virtuell wäre - in diesem Falle ist das Verhalten schlicht undefiniert, sogar dann, wenn du copy eine Implementation spendierst.<br />
Mir ist allerdings auch nicht ganz klar, was du überhaupt bezwecken willst - ob und wann du einer Klasse eine eigene Kopiersemantik spendieren musst, ist schließlich nicht Teil eines Interfaces.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296957</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Jun 2007 22:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Fri, 01 Jun 2007 23:21:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ccopy(const t_source&amp; src) {copy(src);};
</code></pre>
<p>Thus spoke the Giver Of Data:<br />
&quot;Thou shall not call virtual functions within a counstructor and what thou shall not call therein are virtual functions!&quot;</p>
<p>- Bei MSVC 5 gab's einen Compiler-Switch für ein sog. &quot;Construction-Displacement&quot; mit dem sowas ging<br />
=&gt; Furchtbarer Schmutzschalter!</p>
<p>- Manche g++-Versionen kompilieren sowas und dann wirft's &quot;pure virtual funktion call&quot; =&gt; stylische Art aus Programmen &quot;auszusteigen&quot; <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>
<p>- VC Express 05 linked es (zumindest by default) gar nicht erst (ich hoffe inständig dass man dies nicht irgendwie wieder einschalten kann)</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296964</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Fri, 01 Jun 2007 23:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 01:07:55 GMT]]></title><description><![CDATA[<p>vor allem ist es sehr verschwenderisch virtuelle-Vererbung und Methoden für seine eigene Faulheit zu benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296979</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 02 Jun 2007 01:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 07:50:19 GMT]]></title><description><![CDATA[<p>also wenn ich den kopierkonstruktor weglasse, dann funktioniert es?<br />
also wenn ich quasi nur noch den zuweisungsoperator drin habe und die copy-methode abstrakt ist?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/142">@rüdiger</a>: warum verschwendung? so minimiere ich doch fehlerquellen. weil ich hab das zum beispiel auch mit operatoren +=, -=, *=, /=, -, +, *, / vor, dass ich also nur +=, -=, *=, /= definiere und -, +, *, / daraus resultieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296995</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 02 Jun 2007 07:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 09:45:30 GMT]]></title><description><![CDATA[<p>Wenn du boost benutzten würdest müsstest du das Rad nicht neu erfinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297042</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 02 Jun 2007 09:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 10:01:11 GMT]]></title><description><![CDATA[<p>was ist denn boost?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297047</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 02 Jun 2007 10:01:11 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 10:37:43 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>was ist denn boost?</p>
</blockquote>
<p><a href="https://www.google.de/search?&amp;q=boost" rel="nofollow">Google: boost</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://www.boost.org/libs/utility/operators.htm" rel="nofollow">http://www.boost.org/libs/utility/operators.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297069</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 02 Jun 2007 10:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 12:06:46 GMT]]></title><description><![CDATA[<p>und die machen das alles ohne virtuelle-Vererbung. -,+ etc. sollten ja ohnehin nicht als Memberfunktionen implementiert werden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297105</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 02 Jun 2007 12:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 12:31:53 GMT]]></title><description><![CDATA[<p>dein Ansatz ist falsch, C++ ist nicht java, in C++ erstellt man keine klasse copyable oder so, man schreibt einfach den Copykonstruktor neu, falls der standart copykonstruktor nicht zurifft (alle variablen kopieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297114</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Sat, 02 Jun 2007 12:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to kopierklasse on Sat, 02 Jun 2007 13:27:11 GMT]]></title><description><![CDATA[<p>Krux schrieb:</p>
<blockquote>
<p>dein Ansatz ist falsch, C++ ist nicht java, in C++ erstellt man keine klasse copyable oder so</p>
</blockquote>
<p>Ich wüsste nicht, was dagegen spricht. Boost macht es ja auch so. Das Vorgehen ist gut; zumal der kommende C++-Standard dafür sogar mit den Concepts eine explizite Syntax-Unterstützung für bietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297140</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 02 Jun 2007 13:27:11 GMT</pubDate></item></channel></rss>