<?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[Objektverweise - Was passiert hier]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich hab eine kurze Frage zu folgendem Programm</p>
<pre><code class="language-cpp">class A {

public:
	int a;
	A(int x) : a(x) {}

};

int main()
{
	A w(0);
	printf(&quot;%p\n&quot;,&amp;w);

	w = A(1);
	printf(&quot;%p\n&quot;,&amp;w);

	return 0;
}
</code></pre>
<p>Was genau passiert hier?<br />
Ich bekomme bei beiden Print-Anweisungen die selbe Adresse ausgegeben, von daher denke ich, dass die Inhalte der Attribute des temporären Objekts &quot;A(1)&quot; einfach nur in die des Objekts w geschrieben werden und w nach der Anweisung &quot;w = A(1);&quot; auf gar kein neues Objekt zeigt, ist das so richtig?</p>
<p>Gruß <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/301521/objektverweise-was-passiert-hier</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 23:50:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301521.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Mar 2012 08:57:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objektverweise - Was passiert hier on Thu, 29 Mar 2012 08:57:38 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich hab eine kurze Frage zu folgendem Programm</p>
<pre><code class="language-cpp">class A {

public:
	int a;
	A(int x) : a(x) {}

};

int main()
{
	A w(0);
	printf(&quot;%p\n&quot;,&amp;w);

	w = A(1);
	printf(&quot;%p\n&quot;,&amp;w);

	return 0;
}
</code></pre>
<p>Was genau passiert hier?<br />
Ich bekomme bei beiden Print-Anweisungen die selbe Adresse ausgegeben, von daher denke ich, dass die Inhalte der Attribute des temporären Objekts &quot;A(1)&quot; einfach nur in die des Objekts w geschrieben werden und w nach der Anweisung &quot;w = A(1);&quot; auf gar kein neues Objekt zeigt, ist das so richtig?</p>
<p>Gruß <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/2196510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196510</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Thu, 29 Mar 2012 08:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Objektverweise - Was passiert hier on Thu, 29 Mar 2012 09:17:07 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class A {

public:
	int a;               //Membervariable(die in deinem Programm keinen Nutzen hat)
	A(int x) : a(x) {}   //Konstruktor mit Initialisierung

};

int main()
{
	A w(0);               //Du initialisierst a mit 0
	printf(&quot;%p\n&quot;,&amp;w);    //du gibst die Adresse von w aus

	w = A(1);             //du kopierst A in w
	printf(&quot;%p\n&quot;,&amp;w);    //wieder die Adresse ausgeben
	

	return 0;
}
</code></pre>
<p>Gruß <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>
</blockquote>
<p>Ist das aus einem Buch?<br />
[EDIT]:besser wäre, wenn du std::cout nehmen würdest als printf!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196517</guid><dc:creator><![CDATA[Syntax_error]]></dc:creator><pubDate>Thu, 29 Mar 2012 09:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Objektverweise - Was passiert hier on Thu, 29 Mar 2012 09:15:17 GMT]]></title><description><![CDATA[<p>C++ ist nicht Java!<br />
Bei Deiner Zuweisung in Zeile 17 wird wird ein temporäres A-Objekt erstellt und in w hinein kopiert. Also ja, Deine Annahme ist richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196520</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 29 Mar 2012 09:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to Objektverweise - Was passiert hier on Thu, 29 Mar 2012 14:13:06 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Was genau passiert hier?</p>
<p>Ich bekomme bei beiden Print-Anweisungen die selbe Adresse ausgegeben, von daher denke ich, dass die Inhalte der Attribute des temporären Objekts &quot;A(1)&quot; einfach nur in die des Objekts w geschrieben werden und w nach der Anweisung &quot;w = A(1);&quot; auf gar kein neues Objekt zeigt, ist das so richtig?</p>
</blockquote>
<p>w ist ja auch kein Zeiger. w bezeichnet das Objekt <em>direkt</em>. C++ zwingt Dir keine Indirektion bei Klassentypen auf, wie es andere Sprachen machen. Das ist im Prinzip genauso wie bei int und double auch. Deswegen brauchen wir auch <em>viel viel</em> seltener den <code>new</code> Operator. Wir müssen Objekte nicht dynamisch anlegen und uns einen Zeiger darauf merken. Bei der <em>Zuweisung</em> wird der <em>Zuweisungsoperator</em> verwendet, den sich der Compiler selbst aus den Rippen schneidet, weil Du ihn nicht selbst deklariert hast in der Klasse. Das ist auch nicht weiter schlimm; denn dieser Zuweisungsoperator weist einfach allen Datenelementen des Zielobjekts die Werte der Datenelemente des Quellobjekts zu. Die Zuweisung bezieht sich immer auf ein bestehendes Objekt. Ein neues Objekt als Kopie erzeugen kann man auch:</p>
<pre><code class="language-cpp">A x = w;
</code></pre>
<p>Das sieht auch wie eine Zuweisung aus, ist es aber nicht. Hier wird der Kopierkonstruktor der Klasse gefordert. Der wird, weil Du ihn auch nicht deklariert hast, auch vom Compiler erzeugt und rate mal, was der macht ...</p>
<p><em>Verweise</em> sind hier nirgens!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196638</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 29 Mar 2012 14:13:06 GMT</pubDate></item></channel></rss>