<?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[Pointer Member anstatt Übergabe von KLassen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas unsicher was ssauberer ist bzw. was so in der regel gemacht wird.</p>
<p>Angenommen ich habe mehrere Objekte (aus klasseninstanzen) myC1, myC2 etc....</p>
<p>Jetzt habe ich eine dritte Klasse z.B. ClassFoo, die methoden hat die auf Objekten von myC2 und myC2 arbeitet, diese aber nicht verändert.</p>
<p>Mir ist gerade &quot;die Idee&quot; gekommen anstatt in jeder Methode von ClassFoo die Objekte selbst bzw. pointer zu übergeben könnte ich doch innerhalb von ClassFoo member-pointer auf myC1 und myC2 anlegen und dann einfach lokal auf diesen arbeiten !? Ist das unsauber?</p>
<p>Beispiel</p>
<pre><code class="language-cpp">class ClassFoo
{
    public:
        ClassFoo(MyC1* myC1, MyC2* myC2) 
         {
               p_myC1 = myC1;
               p_myC2 = myC2;
          }

          void foo() 
         {
             //auf myC1 bzw. myC2 arbeiten aber über pointer p_myC1 und p_myC2

           }

    private:
        MyC1 *p_myC1;
        MyC2 *p_myC2;
};
</code></pre>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
myFoo.foo();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/257634/pointer-member-anstatt-übergabe-von-klassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 18:42:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257634.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Dec 2009 12:19:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Thu, 31 Dec 2009 12:19:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas unsicher was ssauberer ist bzw. was so in der regel gemacht wird.</p>
<p>Angenommen ich habe mehrere Objekte (aus klasseninstanzen) myC1, myC2 etc....</p>
<p>Jetzt habe ich eine dritte Klasse z.B. ClassFoo, die methoden hat die auf Objekten von myC2 und myC2 arbeitet, diese aber nicht verändert.</p>
<p>Mir ist gerade &quot;die Idee&quot; gekommen anstatt in jeder Methode von ClassFoo die Objekte selbst bzw. pointer zu übergeben könnte ich doch innerhalb von ClassFoo member-pointer auf myC1 und myC2 anlegen und dann einfach lokal auf diesen arbeiten !? Ist das unsauber?</p>
<p>Beispiel</p>
<pre><code class="language-cpp">class ClassFoo
{
    public:
        ClassFoo(MyC1* myC1, MyC2* myC2) 
         {
               p_myC1 = myC1;
               p_myC2 = myC2;
          }

          void foo() 
         {
             //auf myC1 bzw. myC2 arbeiten aber über pointer p_myC1 und p_myC2

           }

    private:
        MyC1 *p_myC1;
        MyC2 *p_myC2;
};
</code></pre>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
myFoo.foo();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1830267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830267</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Thu, 31 Dec 2009 12:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Thu, 31 Dec 2009 12:58:15 GMT]]></title><description><![CDATA[<p>Nein, finde ich eigentlich gut. Allerdings was meinst du genau mit &quot;nicht verändert&quot;? - Wenn du wirklich z.B nur getter Methoden benutzt (welche ja const sind), dann kannst du const Zeiger speichern, anstatt normale.</p>
<p>Kommt halt auch drauf an wie oft du damit rechnest, dass das andere Zeiger sind. Wenn es bei jedem Aufruf ev. andere Objekte sein könnten, dann wird das sicher hässlicher, aber ansonsten sollte das gut machbar sein.</p>
<p>Ich würde ev. auch noch Methoden zum abfragen und setzen der Objekte selbst zur Verfügung zu stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830281</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 31 Dec 2009 12:58:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Thu, 31 Dec 2009 13:28:49 GMT]]></title><description><![CDATA[<p>Du solltest dir auch über Besitzverhältnisse und anderweitige Nutzung deiner Objekte Gedanken machen.<br />
Wenn du sagen kannst &quot;Meine Objekte gehören ClassFoo&quot;, dann würde ich keinen Konstruktor anbieten, der die Zeiger setzen kann, sondern nur Methoden die Zeiger oder besser Referenzen auf die Member zurückgeben.<br />
Dein Beispiel:</p>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
myFoo.foo();
</code></pre>
<p>legt dies nahe! Denn in der main würde ich niemals Objekte als Zeiger anlegen, denn gelöscht müssen die dann auch am Ende der main werden, per Hand!</p>
<p>Wenn du aber Klassen von MyC1 und MyC2 ableitest und eben auch Objekte abgeleiteter Klassen in deinem ClassFoo haben willst, sind Zeiger die beste Möglichkeit (Referenzen würden auch gehen, sei dir aber über die Lebenszeit deiner Objekte hinter den Referenzen im klaren. Sind die tot (weil sie z.B. aus dem Scope laufen), stimmt deine Referenz nimmer.<br />
Auch kann eine Referenz nur einmal initialisiert und danach nimmer verändert werden (also ein anderes Objekt referenzieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830298</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Thu, 31 Dec 2009 13:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Thu, 31 Dec 2009 14:17:24 GMT]]></title><description><![CDATA[<p>Gafabi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
myFoo.foo();
</code></pre>
</blockquote>
<p>Ich finde es nicht gut. Irgendjemand schreibt irgendwann mal so:</p>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
delete myC1;
myC1 = new MyC1;
myFoo.foo();
</code></pre>
<p>Und das Programm läuft manchmal, manchmal nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830319</guid><dc:creator><![CDATA[abc.w]]></dc:creator><pubDate>Thu, 31 Dec 2009 14:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Thu, 31 Dec 2009 14:23:16 GMT]]></title><description><![CDATA[<p>danke für die ideen.</p>
<p>was gäbe es dann für alternativen? Wirklich immer argumente übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830320</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Thu, 31 Dec 2009 14:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Mon, 04 Jan 2010 15:27:39 GMT]]></title><description><![CDATA[<p>hmm....hat sonst noch jemand eine Meinung?<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832229</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Mon, 04 Jan 2010 15:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Mon, 04 Jan 2010 15:31:39 GMT]]></title><description><![CDATA[<p>Und wie sieht es aus mit Pointer auf Objekte die ich innerhalb der klasse verändere? Wird die veränderung auch global gesetzt dann ausserhalb der klasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832233</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Mon, 04 Jan 2010 15:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Mon, 04 Jan 2010 16:18:42 GMT]]></title><description><![CDATA[<p>Gafabi schrieb:</p>
<blockquote>
<p>Und wie sieht es aus mit Pointer auf Objekte die ich innerhalb der klasse verändere? Wird die veränderung auch global gesetzt dann ausserhalb der klasse?</p>
</blockquote>
<p>Ja, klar. Du hast ja lediglich einen Zeiger auf einen Speicherbereich. Und wenn du den jetzt änderst ändert sich das für jeden, der auch auf diesen Bereich zugreift. Das ist ja unter anderem der Sinn von Zeigern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832275</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 04 Jan 2010 16:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Mon, 04 Jan 2010 17:31:14 GMT]]></title><description><![CDATA[<p>abc.w schrieb:</p>
<blockquote>
<p>Gafabi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
myFoo.foo();
</code></pre>
</blockquote>
<p>Ich finde es nicht gut. Irgendjemand schreibt irgendwann mal so:</p>
<pre><code class="language-cpp">//in der main
MyC1 myC1 = new MyC1();
MyC2 myC2 = new MyC2();

ClassFoo myFoo = ClassFoo(myC1,myC2);
delete myC1;
myC1 = new MyC1;
myFoo.foo();
</code></pre>
<p>Und das Programm läuft manchmal, manchmal nicht...</p>
</blockquote>
<p>Was ist hier das konkrete Problem? Insgesamt wäre der Quellcode doch korrekt und löst kein undefiniertes Verhalten aus, oder? (Es ist natürlich nicht schön, aber es tut das was ich hier lese: foo wird jetzt mit einem &quot;anderen&quot; myC1 aufgerufen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832346</guid><dc:creator><![CDATA[hmmmm]]></dc:creator><pubDate>Mon, 04 Jan 2010 17:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Member anstatt Übergabe von KLassen? on Tue, 05 Jan 2010 10:48:31 GMT]]></title><description><![CDATA[<p>Doch es löst &quot;Undefiniertes Verhalten&quot; aus, denn die Klasse ClassFoo hat ja einen Zeiger auf den alten Speicherbereich erhalten (und keinen Zeiger-Zeiger)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832806</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 05 Jan 2010 10:48:31 GMT</pubDate></item></channel></rss>