<?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[Zuweisung an 0]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab einen Beleg zu machen und komm an einer Stelle nicht weiter. Folgendes Problem:</p>
<p>Ich will in einer Klasse einen Zuweisungsoperator überladen.</p>
<p>person operator=(person &amp;p)</p>
<p>allerdings ist das this 0.</p>
<p>nun komme ich in schwierigkeiten, wenn ich die member von p auf this zuweisen will. (2 mal char, 1 char-vektor und 1 unsigned int)</p>
<p>wäre schön, wenn jemand helfen könnte.</p>
<p>mfg</p>
<p>fife</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138681/zuweisung-an-0</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 05:09:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138681.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Feb 2006 14:26:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:26:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab einen Beleg zu machen und komm an einer Stelle nicht weiter. Folgendes Problem:</p>
<p>Ich will in einer Klasse einen Zuweisungsoperator überladen.</p>
<p>person operator=(person &amp;p)</p>
<p>allerdings ist das this 0.</p>
<p>nun komme ich in schwierigkeiten, wenn ich die member von p auf this zuweisen will. (2 mal char, 1 char-vektor und 1 unsigned int)</p>
<p>wäre schön, wenn jemand helfen könnte.</p>
<p>mfg</p>
<p>fife</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005076</guid><dc:creator><![CDATA[fife2]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:28:29 GMT]]></title><description><![CDATA[<p>zeig doch mal bisschen code, wo dein problem dargestellt wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005080</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:39:06 GMT]]></title><description><![CDATA[<p>Die Operator-Methode ist Bestandteil der Klasse person</p>
<pre><code>person &amp;operator=(person &amp;p){
      if((this != &amp;p) &amp;&amp; (&amp;p) ){
	this-&gt;setname(p.getname());
	this-&gt;setvorname(p.getvorname());
	this-&gt;at=p.getat();
	if(this-&gt;at){
	     tel = new char *[at];
              for(unsigned int i=0; i&lt;at; i++){
                 tel[i] = new char[strlen(p[i])+1];
                 strcpy(tel[i], p[i]);
              }
         }
         return *this;
       }
       else if( (this == &amp;p) &amp;&amp; (&amp;p))
 	return *this;
       else if( (this != &amp;p) &amp;&amp; !(&amp;p)){
	setname(&quot;unbekannt&quot;);
	setvorname(&quot;unbekannt&quot;);
	at=0;
	tel=0;
	return *this;
       }
       else if( (!this) &amp;&amp; !(&amp;p)){
	// ToDo !!! Zuweisung an 0-Objekt
	return *this;
       }
}
</code></pre>
<p>Es geht um den letzten else if-Zweig:</p>
<p>in der main steht da:</p>
<pre><code>*p1 = *p2;
</code></pre>
<p>wobei *p2 ein Objekt ist, was mit new angelegt wurde.<br />
Nur *p1 existiert noch nicht.</p>
<p>genau da liegt das problem, wie ich dem *p1, welches inner klasse das this is, was zuweisen kann.</p>
<p>mfg fife</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005095</guid><dc:creator><![CDATA[fife2]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:48:52 GMT]]></title><description><![CDATA[<p>Referenzen können nicht auf null getestet werden, deshalb ist diese Bedingung auch ziemlich schwachsinnig:</p>
<pre><code class="language-cpp">if([...] &amp;&amp; (&amp;p)
</code></pre>
<blockquote>
<p>Nur *p1 existiert noch nicht.</p>
</blockquote>
<p>Wtf? Es gibt keine &quot;0-Objekte&quot;. Entweder es gibt das Objekt, oder nicht!</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005110</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:52:01 GMT]]></title><description><![CDATA[<p>fife2 schrieb:</p>
<blockquote>
<pre><code>*p1 = *p2;
</code></pre>
<p>wobei *p2 ein Objekt ist, was mit new angelegt wurde.<br />
Nur *p1 existiert noch nicht.</p>
</blockquote>
<p>Dann kannst du *p1 auch nichts zuweisen. Zuweisungen ändern immer existierende Objekte.</p>
<p>Vielleicht willst du p1 was zuweisen. Entweder p1 auch auf *p2 zeigen lassen:</p>
<pre><code class="language-cpp">p1=p2;
</code></pre>
<p>Oder p1 auf eine Kopie von *p2 zeigen lassen:</p>
<pre><code class="language-cpp">p1 = new person(*p2);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1005112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005112</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 14:56:07 GMT]]></title><description><![CDATA[<pre><code>void main(){
   person *p0 = new person(); //Defaultkonstruktor
   cout&lt;&lt;*p0; delete p0; p0 = 0;

   p0 = new person(&quot;Mueller&quot;,&quot;Bernd&quot;); //Konstruktor, 2 Parameter
   cout&lt;&lt;&quot;*p0 = &quot;&lt;&lt;*p0; delete p0; p0 = 0;

   p0 = new person(&quot;Neumann&quot;,&quot;Alex&quot;,&quot;460 2440&quot;); //Konstruktor, 3 Parameter
   cout&lt;&lt;&quot;*p0 = &quot;&lt;&lt;*p0;

   person *pp0 = 0;
   person *p1 = new person(*pp0); //Kopierkonstruktor (pp0==0)
/*13*/   cout&lt;&lt;&quot;*p1 = &quot;&lt;&lt;*p1; delete p1; p1 = 0;

   person *p2 = new person(*p0); //Kopierkonstruktor (*p0)
   cout&lt;&lt;&quot;*p2 = &quot;&lt;&lt;*p2;
   *p2 = *p1; //Zuweisungsoperator *p2:=0
   cout&lt;&lt;&quot;*p2 = &quot;&lt;&lt;*p2; delete p2; p2 = 0;
/*19*/   *p1 = *p2; //Zuweisungsoperator 0:=0
   cout&lt;&lt;&quot;*p1 = &quot;&lt;&lt;*p1;

   *p1 = *p0; //Zuweisungsoperator 0:=*p0
   cout&lt;&lt;&quot;*p1 = &quot;&lt;&lt;*p1; delete p1; p1 = 0;
...
}
</code></pre>
<p>das ist die originale vorgegebene main().<br />
und wie man sieht wird in zeile 13 *p1 gelöscht, allerdings soll in zeile 19 diesem 'gelöschten' objekt was zugewiesen werden.</p>
<p>hoffe der zusammenhang ist deutlicher geworden.<br />
(wer meint, daß das nicht geht kann gern die mail-addy vom prof. haben <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/1005115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005115</guid><dc:creator><![CDATA[fife2]]></dc:creator><pubDate>Tue, 28 Feb 2006 14:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 15:09:28 GMT]]></title><description><![CDATA[<p>Tja, leider ist *p1 ab Zeile 13 undefiniert (da p1 auf kein Objekt zeigt) und damit ist auch jede Benutzung von *p1 (spätestens in Zeile 17) undefiniert, bevor nicht p1 etwas neues zugewiesen wurde.</p>
<p>Aber vielleicht wollte Euer Prof ja auch dass ihr genau das rausfindet? <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/1005130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005130</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 28 Feb 2006 15:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 15:13:12 GMT]]></title><description><![CDATA[<p>In Zeile 19 als auch schon in Zeile 17 dereferenzierst du einen NULL-Pointer.<br />
Das geht definitiv schief, und ist daher:<br />
- ein Schreibfehler (deinerseits)<br />
- ein Verständnisfehler (deines Profs)<br />
- Heimtücke (deines Profs)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005134</guid><dc:creator><![CDATA[AberHallo]]></dc:creator><pubDate>Tue, 28 Feb 2006 15:13:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 15:21:17 GMT]]></title><description><![CDATA[<p>Kein Schreibfehler... wahrscheinlich isses doch Heimtücke.</p>
<p>GPC schrieb:</p>
<blockquote>
<p>Referenzen können nicht auf null getestet werden, deshalb ist diese Bedingung auch ziemlich schwachsinnig:</p>
<pre><code class="language-cpp">if([...] &amp;&amp; (&amp;p)
</code></pre>
</blockquote>
<p>^^ war für den fall gedacht, daß ein 0-objekt übergeben wird. funktioniert allerdings.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005149</guid><dc:creator><![CDATA[fife2]]></dc:creator><pubDate>Tue, 28 Feb 2006 15:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 16:02:02 GMT]]></title><description><![CDATA[<p>fife2 schrieb:</p>
<blockquote>
<p>Kein Schreibfehler... wahrscheinlich isses doch Heimtücke.</p>
<p>GPC schrieb:</p>
<blockquote>
<p>Referenzen können nicht auf null getestet werden, deshalb ist diese Bedingung auch ziemlich schwachsinnig:</p>
<pre><code class="language-cpp">if([...] &amp;&amp; (&amp;p)
</code></pre>
</blockquote>
<p>^^ war für den fall gedacht, daß ein 0-objekt übergeben wird. funktioniert allerdings.</p>
</blockquote>
<p>wie bereits erwähnt: es gibt keine 0-objekte, this ist niemals 0 - und der aufruf einer member funktion über einen 0-pointer bzw. das dereferenzieren eines null-pointers ist stets undefiniertes verhalten völlig unabhängig davon, ob das ganze unter bestimmten bedingungen mit einem bestimmten compiler &quot;funktioniert&quot;, d.h. ein wohlbestimmtes ergebnis erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005217</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Feb 2006 16:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 16:11:45 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>wie bereits erwähnt: es gibt keine 0-objekte, this ist niemals 0</p>
</blockquote>
<p>Das kann schonmal passieren, dann ist es aber ein Programmierfehler:</p>
<pre><code class="language-cpp">struct Foo {
    void bar() { cout &lt;&lt; hex &lt;&lt; &quot;0x&quot; &lt;&lt; this; }
};

int main() 
{
    Foo* fooptr = 0;
    fooptr-&gt;bar(); // kann problemlos funktionieren
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1005232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005232</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Tue, 28 Feb 2006 16:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zuweisung an 0 on Tue, 28 Feb 2006 16:20:45 GMT]]></title><description><![CDATA[<p>FireFlow schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>wie bereits erwähnt: es gibt keine 0-objekte, this ist niemals 0</p>
</blockquote>
<p>Das kann schonmal passieren, dann ist es aber ein Programmierfehler:</p>
</blockquote>
<p>was ich im weiteren text, den du versäumt hast, zu zitieren, bereits erläuterte. und der begriff des 'programmierfehlers' ist eher ungeeignet, das verhalten von programmen zu beschreiben. eine aussage - es gibt keine 0-objekte etc. - ist ohnehin nur im kontext wohldefinierten verhaltens zu verstehen. ich denke nicht, dass es notwendig ist, das jedesmal zu betonen.</p>
<p>ich bin auch schon mit code, der ganz bewusst mit this==0 operiert, zu tun gehabt - ich kann nur sagen: gruselig. selbst wenn es zulässig wäre (und nur der zugriff auf member variablen verboten) wäre es doch extrem schwierig, das ganze richtig hinzubekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005247</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Feb 2006 16:20:45 GMT</pubDate></item></channel></rss>