<?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[klassenvariable vom eigenen typ?]]></title><description><![CDATA[<pre><code class="language-cpp">class Abc
{
public:

    Abc test;
}
</code></pre>
<p>geht nicht, wie kann ich denn sowas machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199772/klassenvariable-vom-eigenen-typ</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 22:08:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199772.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Dec 2007 00:43:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 00:43:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Abc
{
public:

    Abc test;
}
</code></pre>
<p>geht nicht, wie kann ich denn sowas machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416225</guid><dc:creator><![CDATA[pixartist^2]]></dc:creator><pubDate>Fri, 07 Dec 2007 00:43:51 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 01:22:32 GMT]]></title><description><![CDATA[<p>Und was stellst du dir praktischerweise darunter vor? Eine Klasse kann sich nicht rekursiv definieren.<br />
Du hast stattdessen zwei Möglichkeiten:<br />
1. eine statische Membervariable erstellen:</p>
<pre><code class="language-cpp">class Abc
{
public:
    static Abc test;
};

// in der Source-Datei dann noch die Definition
Abc Abc::test;
</code></pre>
<p>oder aber einen Zeiger bzw. Referenz auf eine Objekt derselben Klasse:</p>
<pre><code class="language-cpp">class Abc
{
public:
    Abc *test_pointer;
    Abc &amp;test_reference;
};
</code></pre>
<p>Diese müßtest du dann im Konstruktor der Klasse initialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416231</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 07 Dec 2007 01:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 02:01:29 GMT]]></title><description><![CDATA[<p>ich möchte aber keinen pointer auf ein objekt, sondern ich möchte, dass das objekt bei der übergabe an eine der methoden kopiert und auf der variable gespeichert wird. der hintergrund ist folgender:<br />
das ganze ist eine partikelSpawner klasse, welche dynamisch partikel erstellt, verwaltet und zeichnet. jetzt möchte ich der klasse partikelSpawner übergeben, die dann an den stellen, an denen die partikel &quot;sterben&quot; gezündet werden (wie bei einem feuerwerk). da bringt es nix wenn ich nen pointer speichere, da ja jeder ablaufende partikel eine eigene kopie des partikelSpawner objektes braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416234</guid><dc:creator><![CDATA[pixartist^2]]></dc:creator><pubDate>Fri, 07 Dec 2007 02:01:29 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 02:40:30 GMT]]></title><description><![CDATA[<p>Vielleicht so?</p>
<pre><code class="language-cpp">class partikelSpawner
{
    Abc instanz;
    public:
        void PixelStirb(Abc instanz) {
            // Fertige Kopie der Instanz an:
            this-&gt;instanz = instanz;
        }
};

// In deiner Klasse dann...
partikelSpawner particle;
void Abc::Anwenden()
{
    particle.PixelStirb(*this);
}
</code></pre>
<p>Dadurch, dass du den eigenen Objektzeiger (<em>this</em>) dereferenzierst, und ihn der PixelStirb Methode übergibst, hast du schon eine Kopie der Klasseninstanz. Dann kannst du wie gewünscht damit arbeiten.</p>
<p>Das was du oben mit dem 'test' Objekt deiner Klasse versucht hast, ist im Prinzip schon in <em>this</em> enthalten. Damit kannst du also einen Zeiger auf deine eigene Klasseninstanz liefern. Indem du dann in den Funktionsparametern dementsprechend die Variable per call per value erwartest, und den this-Zeiger dereferenziert darauf loslässt, hast du eine Kopie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416235</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Fri, 07 Dec 2007 02:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 17:05:01 GMT]]></title><description><![CDATA[<blockquote>
<p>ich möchte aber keinen pointer auf ein objekt, sondern ich möchte, dass das objekt bei der übergabe an eine der methoden kopiert und auf der variable gespeichert wird. der hintergrund ist folgender:</p>
</blockquote>
<p>Hab jetzt nicht alles hier gelesen ... ein Zeiger auf den Heap hält dich doch nicht vom Kopieren ab? Allerdings ist es nicht möglich sowas zu machen:</p>
<pre><code class="language-cpp">class foo { foo m_copy; };
</code></pre>
<p>... der Compiler kann mit der Foo-Membervariable nicht umgehen, da er nicht das vollständige Objekt kennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416659</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 07 Dec 2007 17:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Fri, 07 Dec 2007 23:40:08 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>Vielleicht so?</p>
<pre><code class="language-cpp">class partikelSpawner
{
    Abc instanz;
    public:
        void PixelStirb(Abc instanz) {
            // Fertige Kopie der Instanz an:
            this-&gt;instanz = instanz;
        }
};

// In deiner Klasse dann...
partikelSpawner particle;
void Abc::Anwenden()
{
    particle.PixelStirb(*this);
}
</code></pre>
<p>Dadurch, dass du den eigenen Objektzeiger (<em>this</em>) dereferenzierst, und ihn der PixelStirb Methode übergibst, hast du schon eine Kopie der Klasseninstanz. Dann kannst du wie gewünscht damit arbeiten.</p>
<p>Das was du oben mit dem 'test' Objekt deiner Klasse versucht hast, ist im Prinzip schon in <em>this</em> enthalten. Damit kannst du also einen Zeiger auf deine eigene Klasseninstanz liefern. Indem du dann in den Funktionsparametern dementsprechend die Variable per call per value erwartest, und den this-Zeiger dereferenziert darauf loslässt, hast du eine Kopie.</p>
</blockquote>
<p>Das sieht nicht nach dem aus was er gesucht hat.<br />
Er sucht eine Art Matruschka für Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416848</guid><dc:creator><![CDATA[oleg_lolek]]></dc:creator><pubDate>Fri, 07 Dec 2007 23:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Sat, 08 Dec 2007 23:30:49 GMT]]></title><description><![CDATA[<p>pixartist^2 schrieb:</p>
<blockquote>
<p>......die dann an den stellen, an denen die partikel &quot;sterben&quot; gezündet werden ...</p>
</blockquote>
<p>oleg_lolek schrieb:</p>
<blockquote>
<p>...<br />
Er sucht eine Art Matruschka für Klassen.</p>
</blockquote>
<p>Und wann soll da Schluss sein ?</p>
<p>Mir klingt das noch nach einem Designfehler: Ein <em>Verwalter</em> von Partikeln ist kein <em>Partikel</em>.<br />
Da sind also mindestens 2 verschiedene Klassen involviert - klingt für mich nach sowas:</p>
<pre><code class="language-cpp">struct Partikel; // forward declaration ist nötig;

struct PartikelVerwalter {
   vector&lt;Partikel*&gt; partikelMenge;
   Partikel* erzeugePartikel();
   void siehMichSterben(Partikel*);
};

class Partikel {
   PartikelVerwalter&amp; verw;
   Partikel(PartikelVerwalter&amp; v) : verw(v) {}
public:
   ~Partikel() { verw.siehMichSterben(this); }
   void PartikelStuff();
};

Partikel* PartikelVerwalter::erzeugePartikel() { 
      Partikel* p = new Partikel(*this);
      partikelMenge.push_back(p);
      return p;
}

void PartikelVerwalter::siehMichSterbn(Partikel* p) {
   // jetzt kannst Du irgendetwas machen .. z.B. den Pointer aus partikelMenge entfernen,
   // neue Partikel erzeugen ,...
};
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417344</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 08 Dec 2007 23:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to klassenvariable vom eigenen typ? on Sun, 09 Dec 2007 17:39:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Mir klingt das noch nach einem Designfehler.</p>
</blockquote>
<p>Das klingt nicht nur so, das ist mit Sicherheit auch einer.<br />
Weil sowas praktisch nicht machbar ist und vor allem auch keinen Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417718</guid><dc:creator><![CDATA[oleg_lolek]]></dc:creator><pubDate>Sun, 09 Dec 2007 17:39:27 GMT</pubDate></item></channel></rss>