<?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[Operationen mit mehreren Klassen]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich weiß, ich sollte bei Fragestellungen auch selber Ansätze liefern. Aber bei dieser Aufgabe habe ich echt kein Schimmer was überhaupt los ist. Könnte mir bitte jemand erklären was zur Hölle hier vor sich geht.</p>
<pre><code># include&lt;iostream&gt;
using namespace std;

class X
{
public:
	X () {cout&lt;&lt;&quot;KX&quot;&lt;&lt;endl;}
	~ X () {cout&lt;&lt;&quot;DX&quot;&lt;&lt;endl; }
};

class Y
{
	private: X x [2][1];
	public:
		Y () {cout&lt;&lt;&quot;KY&quot;&lt;&lt;endl;}
		~ Y () { cout&lt;&lt;&quot;DY&quot;&lt;&lt;endl; }
};

class Z
{
	private:	 Y y; 
				X x;
	public:
		Z () {cout&lt;&lt;&quot;KZ&quot;&lt;&lt;endl;}
		~ Z () { cout&lt;&lt;&quot;DZ&quot;&lt;&lt;endl; }
};
int main ()
{
		{Y y;
		X x;
		}

Z*ZPtr= new Z [2];

system (&quot;pause&quot;) ; 

return 0;
}
</code></pre>
<p>ich wenigen Tagen ist klausurtime und ich häng seit 2 Tagen an dieser Altklausuraufgabe. Bitte erklärt mir mal was da passiert</p>
<pre><code>Ausgabe: 

KX
KX
KY
KX
DX
DY
DX
DX
KX
KX
KY
KX
KZ
KX
KX
KY
KX
KZ
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/317924/operationen-mit-mehreren-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 15:43:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317924.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Jun 2013 22:07:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:07:39 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich weiß, ich sollte bei Fragestellungen auch selber Ansätze liefern. Aber bei dieser Aufgabe habe ich echt kein Schimmer was überhaupt los ist. Könnte mir bitte jemand erklären was zur Hölle hier vor sich geht.</p>
<pre><code># include&lt;iostream&gt;
using namespace std;

class X
{
public:
	X () {cout&lt;&lt;&quot;KX&quot;&lt;&lt;endl;}
	~ X () {cout&lt;&lt;&quot;DX&quot;&lt;&lt;endl; }
};

class Y
{
	private: X x [2][1];
	public:
		Y () {cout&lt;&lt;&quot;KY&quot;&lt;&lt;endl;}
		~ Y () { cout&lt;&lt;&quot;DY&quot;&lt;&lt;endl; }
};

class Z
{
	private:	 Y y; 
				X x;
	public:
		Z () {cout&lt;&lt;&quot;KZ&quot;&lt;&lt;endl;}
		~ Z () { cout&lt;&lt;&quot;DZ&quot;&lt;&lt;endl; }
};
int main ()
{
		{Y y;
		X x;
		}

Z*ZPtr= new Z [2];

system (&quot;pause&quot;) ; 

return 0;
}
</code></pre>
<p>ich wenigen Tagen ist klausurtime und ich häng seit 2 Tagen an dieser Altklausuraufgabe. Bitte erklärt mir mal was da passiert</p>
<pre><code>Ausgabe: 

KX
KX
KY
KX
DX
DY
DX
DX
KX
KX
KY
KX
KZ
KX
KX
KY
KX
KZ
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2334096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334096</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:21:06 GMT]]></title><description><![CDATA[<p>Da werden ein paar Objekte erzeugt und (automatisch) zerstört, wobei im Konstruktor und Destruktor jeweils was ausgegeben wird. Könntest du etwas konkreter fragen? Konstruktor und Destruktor sollte dir etwas sagen, von daher kann es nicht sein, dass du mit der Ausgabe absolut gar nichts anfangen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334098</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:25:11 GMT]]></title><description><![CDATA[<p>Ich rate mal, was du wissen möchtest: Die Member einer Klasseninstanz werden erzeugt, <em>bevor</em> der Körper des Konstruktors ausgeführt wird. Daher bekommst du beim <code>Y y;</code> ganz am Anfang der main erst einmal zweimal &quot;Kx&quot; als Ausgabe, wenn die beiden X im Y erzeugt werden.</p>
<p>Beim Destruktor läuft dann alles in genau umgekehrter Reihenfolge ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334099</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:25:11 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:25:57 GMT]]></title><description><![CDATA[<p>Heute scheint Quiz-Tag zu sein. Aber S.lukas ist wohl schon im Bett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334100</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:28:18 GMT]]></title><description><![CDATA[<p>Ich denke die Reihenfolge der Ausgabe verwirrt dich:<br />
Die Standardinitialisierung der Variablen einer Klasse werden vor dem Rumpf des Konstruktor initialisiert.<br />
Wenn ein Block verlassen wird, wird der Destruktor von den Variablen aufgerufen, die im selbigen Block deklariert werden.</p>
<p>Falls du von Java kommst: In C++ wird kein</p>
<pre><code>new
</code></pre>
<p>benötigt, um Variablen zu erstellen (Heap ist eine andere Geschichte).</p>
<p>Damit solltest du dir eigentlich die Ausgabe erklären können</p>
<p>Edit: Mist, zu langsam <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/2334101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334101</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:29:27 GMT]]></title><description><![CDATA[<p>ja natürlich, mit den Konstruktoren kann ich was anfangen. KX,KY..usw ist klar. Aber was bestimmt jetzt genau, in welcher Reihenfolge die dinger ausgegeben werden. Also ich weiß nicht so recht wann sich das Programm in welcher Klasse befindet. dieses</p>
<p>Y y und<br />
X x [2][1] was ist das ? Dieses Große X und Y steht für die KLasse aber die Kleinbuchstaben ? Wenn das Variablen sind, wo genau erfolg die deklaration ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334102</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Mon, 24 Jun 2013 22:37:12 GMT]]></title><description><![CDATA[<p>vatan89 schrieb:</p>
<blockquote>
<p>Wenn das Variablen sind, wo genau erfolg die deklaration?</p>
</blockquote>
<p>das ist die deklaration, was du meinst ist die definition, welche hier nicht benötigt wird. Die Variablen werden mit dem Standardkonstruktor aufgerufen</p>
<p>vatan89 schrieb:</p>
<blockquote>
<p>X x [2][1]</p>
</blockquote>
<p>Die eckigen Klammern sind Array-Klammern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334104</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Mon, 24 Jun 2013 22:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 19:08:14 GMT]]></title><description><![CDATA[<pre><code>// Füge Headerdatei ein
#include &lt;iostream&gt;  // std::cout

// Benutze Namensraum std / verwerfe das nötige Voranstellen von std::
using namespace std;

// Definiere Klasse X
class X{
    public:
        // Ctor &amp; Dtor
        X () {cout&lt;&lt;&quot;KX&quot;&lt;&lt;endl;}
        ~ X () {cout&lt;&lt;&quot;DX&quot;&lt;&lt;endl; }
};

// Definiere Klasse Y
class Y{
    private:
        // Array mit 2x1 Instanz der Klasse X
        X x [2][1];
    public:
        // Ctor &amp; Dtor
        Y () {cout&lt;&lt;&quot;KY&quot;&lt;&lt;endl;}
        ~ Y () { cout&lt;&lt;&quot;DY&quot;&lt;&lt;endl; }
};

// Definiere Klasse Z
class Z{
    private:
        // Instanz der Klasse Y
        Y y;
        // Instanz der Klasse X
        X x;
    public:
        // Ctor &amp; Dtor
        Z () {cout&lt;&lt;&quot;KZ&quot;&lt;&lt;endl;}
        ~ Z () { cout&lt;&lt;&quot;DZ&quot;&lt;&lt;endl; }
};

// Definiere Programm-Einstiegsfunktion
int main (){
    // Code-Block (Scope kann ausgenutzt werden, um temporäre Objekte automatisch wieder zerstören zu lassen)
    {
        // Erstelle Instanz der Klasse Y
        Y y;
        // Erstelle Instanz der Klasse X
        X x;
    }
    // Erstelle dynamisch ein Array mit 2 Instanzen der Klasse Z
    Z* ZPtr = new Z[2];
    // Führe System-Befehl &quot;pause&quot; aus / warte auf Eingabe
    system (&quot;pause&quot;);
    // Beende Program mit Rückgabewert 0 (gebräuchliche Status-Angabe für 'alles in Ordnung')
    return 0;
}
</code></pre>
<blockquote>
<p>KX &lt;-- Zeile 45: Erstellung von erstem X in Y = Konstruktor von X<br />
KX &lt;-- Zeile 45: Erstellung von zweitem X in Y = Konstruktor von X<br />
KY &lt;-- Zeile 45: Konstruktor von Y<br />
KX &lt;-- Zeile 47: Konstruktor von X<br />
DX &lt;-- Zeile 48: Verlassen des Scopes = Zerstörung von x = Destruktor von X<br />
DY &lt;-- Zeile 48: Verlassen des Scopes = Zerstörung von y = Destruktor von Y<br />
DX &lt;-- Zeile 48: Verlassen des Scopes = Zerstörung von y = Zerstörung des ersten X in Y = Destruktor von X<br />
DX &lt;-- Zeile 48: Verlassen des Scopes = Zerstörung von y = Zerstörung des zweiten X in Y = Destruktor von X<br />
KX &lt;-- Zeile 50: Erstellung von erstem Z = Erstellung von Y in Z = Erstellen von erstem X in Y in Z = Konstruktor von X<br />
KX &lt;-- Zeile 50: Erstellung von erstem Z = Erstellung von Y in Z = Erstellen von zweitem X in Y in Z = Konstruktor von X<br />
KY &lt;-- Zeile 50: Erstellung von erstem Z = Erstellung von Y in Z = Konstruktor von Y<br />
KX &lt;-- Zeile 50: Erstellung von erstem Z = Erstellung von X in Z = Konstruktor von X<br />
KZ &lt;-- Zeile 50: Erstellung von erstem Z = Konstruktor von Z<br />
KX &lt;-- Zeile 50: Erstellung von zweitem Z...<br />
KX &lt;-- ...<br />
KY &lt;-- ...<br />
KX &lt;-- ...<br />
KZ &lt;-- ... (selbe wie beim ersten)</p>
</blockquote>
<p>Das Array in Zeile 50 wurde dynamisch erstellt, also zur Laufzeit, und wird daher nicht automatisch zerstört, deswegen findet keine Zerstörung einer Instanz von Z statt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334107</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Tue, 25 Jun 2013 19:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 07:16:20 GMT]]></title><description><![CDATA[<p>Ich werfe mal das Stichwort &quot;Initialisierungsliste&quot; in den Raum, damit wird das evtl. etwas klarer:</p>
<pre><code class="language-cpp">class X
{
  public:
    X()
    : m_int(5),
      m_y()
    {}

  private:
    int m_int;
    Y m_y;
}
</code></pre>
<p>Die Initialisierungsliste kann weggelassen werden, dann werden alle Member als default initialisiert (sofern dies möglich ist, ansonsten gibts ne Fehlermeldung).</p>
<p>Somit sollte auch klar sein, dass die Member initialisiert werden, *bevor* der Rumpf des Konstruktors aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334130</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 25 Jun 2013 07:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 13:37:40 GMT]]></title><description><![CDATA[<pre><code>KX   //Durch das X x [2][1] wird das KX zweimal ausgegeben 
KX   //
KY   //Anschließend tritt der Konstruktor von Class Y 
KX   //und von der Class X
DX   // Destruktor von Class X 
DY   //Weshalb kommt hier erst der Destruktor von Y ? 
DX   // ICh schätze mal die beiden DX killen die beiden KX am Anfang 
DX
KX   // hier beginnt die Instanz der Klasse X x ? 
KX
KY
KX   // Ende von der Instanz Xx ? 
KZ   
KX   
KX
KY
KX   // gleiche Frage wie oben. Warum kommt hier nochmal der Konstruktor von X
KZ
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2334226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334226</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Tue, 25 Jun 2013 13:37:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 13:55:55 GMT]]></title><description><![CDATA[<p>vatan89 schrieb:</p>
<blockquote>
<pre><code>KX   //Durch das X x [2][1] wird das KX zweimal ausgegeben 
KX   //
KY   //Anschließend tritt der Konstruktor von Class Y 
KX   //und von der Class X
DX   // Destruktor von Class X 
DY   //Weshalb kommt hier erst der Destruktor von Y ? 
DX   // ICh schätze mal die beiden DX killen die beiden KX am Anfang 
DX
KX   // hier beginnt die Instanz der Klasse X x ? 
KX
KY
KX   // Ende von der Instanz Xx ? 
KZ   
KX   
KX
KY
KX   // gleiche Frage wie oben. Warum kommt hier nochmal der Konstruktor von X
KZ
</code></pre>
</blockquote>
<p>Aufräumen geschieht <strong>genau umgekehrt</strong> wie das Erstellen.</p>
<pre><code>int main()
{
  {
    Y y;
</code></pre>
<p>Ein Y wird erstellt. Es enthält 2 X. Als Member werden diese zuerst erstellt:</p>
<pre><code>KX
KX
</code></pre>
<p>Dann der Rest vom Y selbst:</p>
<pre><code>KY
</code></pre>
<pre><code>X x;
</code></pre>
<p>Ein X wird erstellt:</p>
<pre><code>KX
</code></pre>
<pre><code>}
</code></pre>
<p>Ende des Scopes, das Y und das X werden zerstört. Zuerst das X:</p>
<pre><code>DX
</code></pre>
<p>Dann das Y:</p>
<pre><code>DY
</code></pre>
<p>Dann die beiden X, die Member von Y sind:</p>
<pre><code>DX
DX
</code></pre>
<pre><code>Z*ZPtr= new Z [2];
</code></pre>
<p>Zwei Z werden erzeugt. <strong>Nacheinander</strong>. Jedes Z enthält ein Y und ein X (das Y zuerst, da es weiter oben steht). Das Y wieder zwei X. Also zuerst wird das Y erzeugt, dazu werden zuerst zwei X erzeugt:</p>
<pre><code>KX
KX
</code></pre>
<p>Dann das Y selbst:</p>
<pre><code>KY
</code></pre>
<p>Dann das X als zweiter Member des Z:</p>
<pre><code>KX
</code></pre>
<p>Dann das Z selbst:</p>
<pre><code>KZ
</code></pre>
<p>ann das gleiche noch einmal für das zweite Z:</p>
<pre><code>KX
KX
KY
KX
KZ
</code></pre>
<p>Preisfrage, ob du es auch verstanden hast: Wie sähe die Ausgabe bei einem anschließenden <code>delete[] ZPtr;</code> aus? (Mit Erklärung, nicht einfach ausprobieren!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334235</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 25 Jun 2013 13:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 16:35:55 GMT]]></title><description><![CDATA[<p>poah Wahnsinn danke Leute, echt. Hab's jetzt endlich kapiert *schwere Geburt* <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>Also zur Preisfrage:</p>
<p>Wenn ich den Pointer Kille :</p>
<pre><code>DZ
DX
DY
DX
DX
DZ
DX
DY
DX
DX
</code></pre>
<p>???? so in der Art</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334294</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Tue, 25 Jun 2013 16:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 22:19:35 GMT]]></title><description><![CDATA[<p>Fast. y wird in Z zuerst deklariert, also auch zuerst zerstört.<br />
Tauscch die Zerstörung von y und x aus, dann stimmt's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334385</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 25 Jun 2013 22:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Tue, 25 Jun 2013 23:39:40 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Fast. y wird in Z zuerst deklariert, also auch zuerst zerstört.<br />
Tauscch die Zerstörung von y und x aus, dann stimmt's.</p>
</blockquote>
<p>Nein, gerade aus diesem Grund ist es so wie vatan89 richtig gesagt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334393</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 25 Jun 2013 23:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Wed, 26 Jun 2013 00:38:43 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Fast. y wird in Z zuerst deklariert, also <s>auch zuerst zerstört.</s></p>
</blockquote>
<p>zuletzt zerstört.<br />
Zerstört wird immer in der umgekehrten Reihenfolge wie aufgebaut wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334396</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 26 Jun 2013 00:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Wed, 26 Jun 2013 07:41:10 GMT]]></title><description><![CDATA[<p>Grrr, in letzter Zeit häufen sich Griffe ins Klo bei mir. Vor allem wenn ich eigentlich wüsste wie es richtig ist.<br />
Ich schiebe es mal auf Müdigkeit beim Erstellen des Posts und entschuldige mich für eventuell entstandene Verwirrung. <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/2334419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334419</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 26 Jun 2013 07:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 12:51:40 GMT]]></title><description><![CDATA[<p>Leute hab grad die Klausur hinter mir und dazu eine dringende Frage, was ich unbedingt wissen muss:</p>
<p>In der Aufgabe kam sowas ähnliches wie ich hier schon gepostet habe.</p>
<p>es sah in der Form aus, solang es noch frisch ist:</p>
<p>3- Klassen jeweils x,y,z</p>
<p>f1(....)<br />
{ Z = new y} // oder so ähnlich, aufjedenfall ein new Objekt</p>
<pre><code>int main () 
{
 Y y;  // so in der Form die Funktion f1 wurde in der Klasse beschrieben
 f1(y); 

}
</code></pre>
<p>Meine Frage, befindet sich das f1(y) noch im Scope ? sprich wenn ich die Konstruktoren erzeuge.</p>
<pre><code>KX   |
KX   | gehören alle dem Objekt Yy
KY   |
KX   |
</code></pre>
<p>werden diese vor dem übergang zu f1(y) zerstört oder erst nach der ausführung des von f1(y) bzw des new y ?</p>
<p>falls ich es etwas unklar formuliert habe, entschuldigt dies bitte es ist nur eine wage beschreiben. Ich hatte eine wahl zwischen</p>
<pre><code>KX             KX
KX             KX
KY             KY
KX             KX
KZ    oder     KZ
KX             DZ            
KX             DX
KY             DY
KX             DX
KZ             DX
DZ             KX
DX             KX
DY             KY         
DX             KX
DX             KZ
</code></pre>
<p>ich habe dummerweise das linke gewählt, weil ich dachte, dass zuerst new noch erstellt wird und dann das objekt von oben zerstört wird. Aber ich denke dass das rechte richtig ist.</p>
<p>Findet nacht der main die zerstörung vor dem new statt oder erst nachdem new erstellt wurde ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2334992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334992</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Fri, 28 Jun 2013 12:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 12:52:07 GMT]]></title><description><![CDATA[<p>Der Scope endet mit der schließenden Klammer. Zu dem Zeitpunkt werden auch die lokalen Variablen zerstört.</p>
<p>Eine Funktion hat ihren eigenen Scope. Du kannst es dir so vorstellen, dass der Rumpf der Funktion an der Stelle des Aufrufs eingefügt wird (was bei inline-Methoden tatsächlich der Fall ist)</p>
<p>Also sind bezüglich der Objekt-Lebensdauer äquivalent:</p>
<pre><code class="language-cpp">f()
{
  X x = new X;
}

int main()
{
  Y y;

  f();

}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">int main()
{
  Y y;

  {
    X* x = new X;
  }

}
</code></pre>
<p>Da das innere x aber nicht zerstört wird, ist es eigentlich auch egal, wie lange es genau lebt <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/2334998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2334998</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 28 Jun 2013 12:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 12:56:58 GMT]]></title><description><![CDATA[<p>Ein Scope wird verlassen, wenn <strong>seine</strong> geschweifte Klammer geschlossen wird:</p>
<pre><code>{
 Y y;
 // Code
 {
   // Code
  {
   // usw.

  } // interessiert y nicht die Bohne
  // Code
 } // interessiert y nicht die Bohne
 // Code

} // Hier stirbt y.
</code></pre>
<p>Dazwischen mag stehen was will. Selbstverständlich auch Funktionsaufrufe. Auch bei einer Exception würde y erst an der beschriebenen Stelle zerstört. Ebenso bei einem goto, break oder ähnlichem aus dem Scope heraus. Einzig solch gefürchtete Mittel wie exit, abort, longjmp &amp; Co. können den Scope verlassen, ohne dass ein Destruktor aufgerufen wird (und sind daher zu vermeiden, wenn man nicht ganz genau weiß, was man tut).</p>
<p>daddy_felix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main()
{
  Y y;
  
  {
    X* x = new X;
  }
 
}
</code></pre>
<p>Da das innere x aber nicht zerstört wird, ist es eigentlich auch egal, wie lange es genau lebt <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>
</blockquote>
<p>Das x wird schon zerstört. Aber x ist hier ein roher Pointer und sein Pointee bekommt davon nichts mit. Das mit new erzeugte Objekt existiert also immer noch und ist nicht mehr erreichbar. Typisches Anfängerspeicherloch, wie bei bisher jedem Code den vatan89 uns von seinem Lehrer gezeigt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2335000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335000</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 28 Jun 2013 12:56:58 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 12:55:12 GMT]]></title><description><![CDATA[<p>also ist die rechte Variante richtig ? Da lag ich mit der linken wohl wieder voll auf dem Holzweg...wo soll das nur enden mit mir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2335002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335002</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Fri, 28 Jun 2013 12:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 12:59:05 GMT]]></title><description><![CDATA[<p>vatan89 schrieb:</p>
<blockquote>
<p>also ist die rechte Variante richtig ?</p>
</blockquote>
<p>Nein, alles ist falsch. Oder wahrscheinlicher: Du erinnerst dich falsch an die Aufgabenstellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2335003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335003</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 28 Jun 2013 12:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 13:00:52 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Typisches Anfängerspeicherloch, wie bei bisher jedem Code den vatan89 uns von seinem Lehrer gezeigt hat.</p>
</blockquote>
<p>Wobei ich das in diesem Fall durchaus für Absicht halte. Es geht darum, zu erkennen, wann (und <strong>ob</strong>) Destruktoren aufgerufen werden. Da ist so ein einzelnes new natürlich ein fieser Trick.</p>
<p>Wesentlich interessanter (und realitätsnäher) wäre die Aufgabe natürlich mit Smart Pointern <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/2335006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335006</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 28 Jun 2013 13:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 13:02:37 GMT]]></title><description><![CDATA[<p>ja ich habe ein sehr schlechtes Gedächtnis :S</p>
<p>aber in dem moment kam es mir halt logisch vor dass die destruktoren von</p>
<p>Y y;</p>
<p>erst nach der Ausführung von</p>
<p>f1(new) kommen. Weil die sich ja in der gleichen Klammer befinden {} kein plan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2335008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335008</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Fri, 28 Jun 2013 13:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 13:07:27 GMT]]></title><description><![CDATA[<p>vatan89 schrieb:</p>
<blockquote>
<p>aber in dem moment kam es mir halt logisch vor dass die destruktoren von</p>
<p>Y y;</p>
<p>erst nach der Ausführung von</p>
<p>f1(new) kommen.</p>
</blockquote>
<p>ist ja auch richtig so. Was wäre sonst mit diesem Code:</p>
<pre><code class="language-cpp">{
  Y y;

  f();

  y.DoSomething();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2335013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335013</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 28 Jun 2013 13:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Operationen mit mehreren Klassen on Fri, 28 Jun 2013 13:09:27 GMT]]></title><description><![CDATA[<p>wenn das richtig ist gibts erstmal Freibier von mir auf dem Campus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2335017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2335017</guid><dc:creator><![CDATA[coc1948]]></dc:creator><pubDate>Fri, 28 Jun 2013 13:09:27 GMT</pubDate></item></channel></rss>