<?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[Kopien, Referenzen, Zeiger]]></title><description><![CDATA[<p>Hallo,</p>
<p>was ist eigentlich genau der Unterschied zwischen folgenden Arten von Class-Membern:</p>
<p>class B {...}</p>
<p>class A<br />
{<br />
private:<br />
B m_b1;<br />
B&amp; m_b2;<br />
B* m_b3;</p>
<p>public:<br />
...<br />
}</p>
<p>Also rein speichertechnisch weiß ich etwa den Unterschied, nur hab ich noch nicht ganz verstanden, was das programmtechnisch für einen Unterschied macht.</p>
<p>Also WANN (für welche Problemstellung) sollte man Kopie, Referenz oder Zeiger verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155375/kopien-referenzen-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 16:30:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155375.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Aug 2006 12:08:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 12:08:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>was ist eigentlich genau der Unterschied zwischen folgenden Arten von Class-Membern:</p>
<p>class B {...}</p>
<p>class A<br />
{<br />
private:<br />
B m_b1;<br />
B&amp; m_b2;<br />
B* m_b3;</p>
<p>public:<br />
...<br />
}</p>
<p>Also rein speichertechnisch weiß ich etwa den Unterschied, nur hab ich noch nicht ganz verstanden, was das programmtechnisch für einen Unterschied macht.</p>
<p>Also WANN (für welche Problemstellung) sollte man Kopie, Referenz oder Zeiger verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111018</guid><dc:creator><![CDATA[sly]]></dc:creator><pubDate>Sat, 05 Aug 2006 12:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 12:21:29 GMT]]></title><description><![CDATA[<p>zB:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int mul2_copy( int value )
{
    return value * 2;
}

void mul2_ref( int &amp;value )
{
    value *= 2;
}

void mul2_array( int *value, size_t num )
{
    for( size_t i = 0; i &lt; num; ++i )
        value[ i ] *= 2;
}

int main( )
{
    cout &lt;&lt; mul2_copy( 2 ) &lt;&lt; endl;

    int value = 2;
    mul2_ref( value );
    cout &lt;&lt; value &lt;&lt; endl;

    int values[ ] = { 1, 2, 3, 4, 5, 6 };
    mul2_array( values, 6 );

    for( int i = 0; i &lt; 6; ++i )
        cout &lt;&lt; values[ i ] &lt;&lt; &quot; &quot;;
    cout &lt;&lt; endl;
}
</code></pre>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111025</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 05 Aug 2006 12:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 12:33:37 GMT]]></title><description><![CDATA[<p>Hm, ja soweit ist mir das klar, aber um noch einmal auf meine Problemstellung zurückzukommen:</p>
<p>Stell dir vor, du hast eine Aggregation, und zwar eine 1:1 Beziehung.</p>
<p>Eine Klasse A HAT eine Klasse B als Membervariable.</p>
<p>Würdest du diese Membervariable als einfache Kopie, als Referenz oder als Zeiger speichern?</p>
<p>(Vielleicht sollte deine Antwort ja genau diese Frage beantworten, und ich habe sie nur nicht richtig verstanden) <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>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111034</guid><dc:creator><![CDATA[sly]]></dc:creator><pubDate>Sat, 05 Aug 2006 12:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 12:45:37 GMT]]></title><description><![CDATA[<p>Das kann man pauschal so nicht beantworten. Das kommt darauf an, was du damit machen möchtest. Eine Referenz scheint am wenigsten geeignet.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111044</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 05 Aug 2006 12:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 13:25:14 GMT]]></title><description><![CDATA[<p>Beispiel:</p>
<p>Eine Klasse 'Haus' hat als Member ein Objekt der Klasse 'Tuer'.</p>
<p>Das Haus besitzt eine Methode zum Ändern der Höhe der Tuer.</p>
<p>etwa so:</p>
<pre><code class="language-cpp">class Haus
{
private:
   Tuer m_tuer; //oder als Zeiger?

public:
   Haus(const Tuer&amp; tuer) :m_tuer(tuer)
   {
   }
   void setHeighOfTuer(int x)
   {
      m_tuer.setHeight(x);
   }
};
</code></pre>
<p>(die Klasse Tuer hab ich mir geschenkt)</p>
<p>Beide Objekte der Klasse Haus und Tuer sollen zur Laufzeit in 'main' erstellt werden. Etwa so:</p>
<p>Tuer t;<br />
Haus h(t);<br />
h.setHeight(2);</p>
<p>Habe ich es richtig verstanden, dass, wenn die Membervaribale m_tuer ein Zeider oder eine Referenz wäre, dass Objekt 't' veäbdert würde, im meinem obigen Falle jedoch nur eine Kopie und nicht die Membervaribale selbst verändert würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111060</guid><dc:creator><![CDATA[sly]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 13:55:25 GMT]]></title><description><![CDATA[<p>sly schrieb:</p>
<blockquote>
<p>Habe ich es richtig verstanden, dass, wenn die Membervaribale m_tuer ein Zeider oder eine Referenz wäre, dass Objekt 't' veäbdert würde, im meinem obigen Falle jedoch nur eine Kopie und nicht die Membervaribale selbst verändert würde?</p>
</blockquote>
<p>Ja.</p>
<p>Wobei ich dein Beispiel für nicht gerade für sinnhaft im sinne der OOP halte.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111089</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 14:00:03 GMT]]></title><description><![CDATA[<p>Wenn du Membervariablen zu Referenzen machst, musst du aufpassen, dass keiner Unsinn damit macht. Also am besten lässt du das, es sei denn es ist absolut nötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111092</guid><dc:creator><![CDATA[Hazzel]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Sat, 05 Aug 2006 14:13:16 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Wobei ich dein Beispiel für nicht gerade für sinnhaft im sinne der OOP halte.</p>
</blockquote>
<p>Ich weiß. <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>
<p>War auch nur ein simples Beispiel für die generelle Situation:</p>
<p>eine Klasse A braucht zur Erledigung ihrer Aufgabe ein Objekt der Klasse B, und muss den Zustand dieses Objekts speichern...</p>
<p>Oder ist DAS in deinen Augen auch unsinnig im Sinne der OOP?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111104</guid><dc:creator><![CDATA[sly]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Wed, 09 Aug 2006 14:22:13 GMT]]></title><description><![CDATA[<p>sly schrieb:</p>
<blockquote>
<p>Beispiel:</p>
<p>Eine Klasse 'Haus' hat als Member ein Objekt der Klasse 'Tuer'.</p>
<p>Das Haus besitzt eine Methode zum Ändern der Höhe der Tuer.</p>
<p>etwa so:</p>
<pre><code class="language-cpp">class Haus
{
private:
   Tuer m_tuer; //oder als Zeiger?

public:
   Haus(const Tuer&amp; tuer) :m_tuer(tuer)
   {
   }
   void setHeighOfTuer(int x)
   {
      m_tuer.setHeight(x);
   }
};
</code></pre>
<p>(die Klasse Tuer hab ich mir geschenkt)</p>
<p>Beide Objekte der Klasse Haus und Tuer sollen zur Laufzeit in 'main' erstellt werden. Etwa so:</p>
<p>Tuer t;<br />
Haus h(t);<br />
h.setHeight(2);</p>
<p>Habe ich es richtig verstanden, dass, wenn die Membervaribale m_tuer ein Zeider oder eine Referenz wäre, dass Objekt 't' veäbdert würde, im meinem obigen Falle jedoch nur eine Kopie und nicht die Membervaribale selbst verändert würde?</p>
</blockquote>
<p>Der entscheidende Begriff ist dabei &quot;Ownership&quot;: Hat die Tür (also genau das Exemplar) auch außerhalb des Hauses eine Existenzberechtigung/Funktion/Aufgabe/Leben/... ?<br />
Ja : Pointer/Referenz (ggf. const)<br />
Nein: Unterobjekt</p>
<p>Ist nur eine grobe Regel für die erste Entscheidung; es gibt viele Spezialfälle, in denen man davon abweicht, aber zur ersten Orientierung hilt's erstmal.<br />
Anders ausgedürckt: &quot;Gehört&quot; die Tür dem Haus ? Wenn ja, dann sollte es die auch selbst kapseln, nur selbst verwalten (d.h. private Attribut halten, nur Kopien/const-Referenzen rausgeben und Manipulationen nur über über Zugriffsfunktionen zulassen). =&gt; Die Tür wird mit dem Haus geboren und stirbt mit ihm. (Falls das Haus seine Tür(en) überleben muß, bleibt Dir in C++ nichts anderes übrig als trotzdem einen Pointer oder einen Container zu verwenden ... aber das ist eine der o.g. Ausnahmen).</p>
<p>Hat sie jedoch nur &quot;Anteil an der Tür&quot;, würde ich dem Haus auch nur eine (const)-Referenz oder einen (const)-Pointer zugestehen. Damit kann dem Haus eine beliebige Tür (z.B. auch eine Spezialisierung wie &quot;Holztür&quot; oder &quot;Stahltür&quot;) zugewiesen werden.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1113850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1113850</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 09 Aug 2006 14:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Wed, 09 Aug 2006 19:53:36 GMT]]></title><description><![CDATA[<p>Danke, das bringt mich schon mal weiter. Das war worauf meine Frage abzielte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114091</guid><dc:creator><![CDATA[sly]]></dc:creator><pubDate>Wed, 09 Aug 2006 19:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Thu, 10 Aug 2006 10:23:14 GMT]]></title><description><![CDATA[<p>1. Fall<br />
Nehmen wir an es gäbe 2 Fussballvereine, die sich einen Platz teilen.</p>
<p>In solch einem Fall würdest du einen Zeiger auf einen solchen Platz als Membervariable definieren.</p>
<p>2. Fall</p>
<p>Gehört der Platz dem Verein selbst würdest du die Membervariable vom Typ Platz definieren (layering)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114420</guid><dc:creator><![CDATA[kuerbis]]></dc:creator><pubDate>Thu, 10 Aug 2006 10:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kopien, Referenzen, Zeiger on Thu, 10 Aug 2006 12:36:33 GMT]]></title><description><![CDATA[<p>kuerbis schrieb:</p>
<blockquote>
<p>2. Fall<br />
Gehört der Platz dem Verein selbst würdest du die Membervariable vom Typ Platz definieren (layering)</p>
</blockquote>
<p>gehörte jedem verein genau ein platz, würde ich zuerst an layering denken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114545</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 10 Aug 2006 12:36:33 GMT</pubDate></item></channel></rss>