<?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[Destruktor&#x2F;Konstruktor Aufgabe]]></title><description><![CDATA[<p>In der Klasur bekommen wir zum Beispiel folgenden Quelltext:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
class Zwei
{
char name;
public:
Zwei( const char&amp; n) : name(n) {cout &lt;&lt;&quot;KZwei von &quot; &lt;&lt; name
&lt;&lt; endl;}
~Zwei(){ cout &lt;&lt;&quot;DZwei von &quot; &lt;&lt; name &lt;&lt; endl; }
};
class Eins
{
Zwei member1, member2;
public:
Eins( const Zwei&amp; m1, const Zwei&amp; m2) // Konstruktor
: member1(m2), member2(m1) {cout &lt;&lt; &quot;KEins!&quot; &lt;&lt; endl;}
~Eins()
{ cout &lt;&lt; &quot;DEins!&quot; &lt;&lt; endl; }
};
int main()
{
Zwei Objekt1(99), Objekt2(33);
Eins aEins( Objekt1, Objekt2);
Eins * EPtr = new Eins (Objekt1,Objekt2);
cout &lt;&lt; &quot;Main Ende!&quot; &lt;&lt; endl;
return 0;
}
</code></pre>
<p>Die Ausgabe lautet:</p>
<p>KZwei von c<br />
KZwei von !<br />
KEins!<br />
KEins!<br />
Main Ende!<br />
DEins!<br />
DZwei von c<br />
DZwei von !<br />
DZwei von !<br />
DZwei von c</p>
<p>So ganz versteh ich das aber nicht^^<br />
Ich versuchs ma so weit ichs vertsehe zu erklären, wär gut wenn mir jemand helfen kann.</p>
<p>Man erzeugt 2 Objekte deren wert (99 und 33) per Referenz an n übergeben wird.<br />
Da es eine Char Variable ist, wird bei der Ausgabe der Wert in ein Zeichen Umgewandelt (ACII tabelle) Es wird somit 2 mal der Konstruktor aufgerufen, der die Ausgabe &quot;KZwei von c&quot; und &quot;KZwei von !&quot; erzeugt.</p>
<p>Danach wird es ziemlich wüst, wenn das objekt der klasse 1 und der pointer per new operator erzeugt wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> kann mir jemand kurz erklären wieso die ausgabe so weiter geht, wie er der kompiler eben tut ?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297227/destruktor-konstruktor-aufgabe</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 14:33:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297227.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Dec 2011 16:54:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor&#x2F;Konstruktor Aufgabe on Wed, 21 Dec 2011 16:54:10 GMT]]></title><description><![CDATA[<p>In der Klasur bekommen wir zum Beispiel folgenden Quelltext:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
class Zwei
{
char name;
public:
Zwei( const char&amp; n) : name(n) {cout &lt;&lt;&quot;KZwei von &quot; &lt;&lt; name
&lt;&lt; endl;}
~Zwei(){ cout &lt;&lt;&quot;DZwei von &quot; &lt;&lt; name &lt;&lt; endl; }
};
class Eins
{
Zwei member1, member2;
public:
Eins( const Zwei&amp; m1, const Zwei&amp; m2) // Konstruktor
: member1(m2), member2(m1) {cout &lt;&lt; &quot;KEins!&quot; &lt;&lt; endl;}
~Eins()
{ cout &lt;&lt; &quot;DEins!&quot; &lt;&lt; endl; }
};
int main()
{
Zwei Objekt1(99), Objekt2(33);
Eins aEins( Objekt1, Objekt2);
Eins * EPtr = new Eins (Objekt1,Objekt2);
cout &lt;&lt; &quot;Main Ende!&quot; &lt;&lt; endl;
return 0;
}
</code></pre>
<p>Die Ausgabe lautet:</p>
<p>KZwei von c<br />
KZwei von !<br />
KEins!<br />
KEins!<br />
Main Ende!<br />
DEins!<br />
DZwei von c<br />
DZwei von !<br />
DZwei von !<br />
DZwei von c</p>
<p>So ganz versteh ich das aber nicht^^<br />
Ich versuchs ma so weit ichs vertsehe zu erklären, wär gut wenn mir jemand helfen kann.</p>
<p>Man erzeugt 2 Objekte deren wert (99 und 33) per Referenz an n übergeben wird.<br />
Da es eine Char Variable ist, wird bei der Ausgabe der Wert in ein Zeichen Umgewandelt (ACII tabelle) Es wird somit 2 mal der Konstruktor aufgerufen, der die Ausgabe &quot;KZwei von c&quot; und &quot;KZwei von !&quot; erzeugt.</p>
<p>Danach wird es ziemlich wüst, wenn das objekt der klasse 1 und der pointer per new operator erzeugt wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> kann mir jemand kurz erklären wieso die ausgabe so weiter geht, wie er der kompiler eben tut ?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2159814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2159814</guid><dc:creator><![CDATA[Juleian*]]></dc:creator><pubDate>Wed, 21 Dec 2011 16:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor&#x2F;Konstruktor Aufgabe on Wed, 21 Dec 2011 17:05:54 GMT]]></title><description><![CDATA[<p>Rück den Code mal vernünftig ein. oO</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>KZwei von c<br />
KZwei von !</p>
</blockquote>
<p>Werden natürlich von Objekt1 und Objekt2 geschrieben.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>KEins!</p>
</blockquote>
<p>Das hier gehört zum aEins, klar. Hier werden Objekt1 und Objekt2 übrigens kopiert, allerdings siehst du das nicht, weil der Kopierkonstruktor keine Ausgabe erzeugt.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>KEins!</p>
</blockquote>
<p>Das über new erzeugte Objekt. Objekt1 und Objekt2 werden hier wieder im Stillen kopiert.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>Main Ende!</p>
</blockquote>
<p>Logisch.<br />
Ab hier werden die Objekte die auf dem Stack liegen in umgekehrter Reihenfolge wieder zerstört.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>DEins!</p>
</blockquote>
<p>Ausgabe im Destruktor von aEins.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>DZwei von c<br />
DZwei von !</p>
</blockquote>
<p>Hier werden die Membervariablen von aEins zerstört. c steht dabei zuerst, weil der Konstruktor von &quot;Zwei&quot; die Reihenfolge vertauscht.</p>
<p>Juleian* schrieb:</p>
<blockquote>
<p>DZwei von !<br />
DZwei von c</p>
</blockquote>
<p>Objekt2 und Objekt1 werden zerstört.</p>
<p>Es fällt natürlich auf, dass die mit new angelegten Objekte nicht zerstört werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2159821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2159821</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 21 Dec 2011 17:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor&#x2F;Konstruktor Aufgabe on Wed, 21 Dec 2011 19:00:58 GMT]]></title><description><![CDATA[<p>ok soweit eig verständlich. das objekt mit dem new operator wird ja nicht zerstört weils im heap angelegt wird. die vertauschte reihenfolge beim destruktoraufruf der verborgenen kopierten objekte ergit sich doch aus dieser zeile: : member1(m2), member2(m1) {cout &lt;&lt; &quot;KEins!&quot; &lt;&lt; endl;) ?<br />
kennst du eine gute seite wo ich genaueres zu dem kopierkonstruktor nachlesen kann?</p>
<p>danke schonmal; der quellcode ist übrigens so durcheinander in der klausur <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/2159873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2159873</guid><dc:creator><![CDATA[Juleian*]]></dc:creator><pubDate>Wed, 21 Dec 2011 19:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor&#x2F;Konstruktor Aufgabe on Wed, 21 Dec 2011 19:42:17 GMT]]></title><description><![CDATA[<p><a href="http://de.wikibooks.org/wiki/C++-Programmierung:_Klassen#Konstruktoren" rel="nofollow">http://de.wikibooks.org/wiki/C++-Programmierung:_Klassen#Konstruktoren</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2159891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2159891</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 21 Dec 2011 19:42:17 GMT</pubDate></item></channel></rss>