<?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[Der this Zeiger - Wann?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Grundsätzlich ist mir der sinn des this Zeiger klar. Jedoch hat mich letztens etwas doch nachdenklich gemacht. ich schildere mal. Ich erstelle von einer BasisForm mehrfach-instanzen zur Laufzeit. Auf der BasisForm habe ich zur designtime ein paar standard komponenten (timer etc.) sowie 3rd party komponenten drauf getan. Sowohl visuelle und nicht visuelle (indy ftp z.b.). Desweiteren habe ich in der klasse der basis form noch ein paar elementvariablen als public/private sowie ein paar methoden So, jetzt meine frage:</p>
<p><em>(alles spielt sich direkt in der instanz der basis form ab. events etc.)</em><br />
Wann muss man in diesem fall nun den this zeiger anwenden und wann nicht? grundsätzlich dachte ich für die elementvariablen: nein. für die form selber: ja. Weil z.B. BasisForm-&gt;Caption würde dann ja nicht die caption der instanz, sondern der BasisForm selber ändern, richtig oder? also muss für die form (instanz davon) selber immer mit this-&gt;Caption gearbeitet werden, klar soweit. bei den elementvariablen muss es ja nicht sein da es ja keine dereferenzierengs möglichkeit gibt. z.b. isTraffic würde ja immer nur im gleichen objekt bzw. in der instanz, die es betrifft sein. sonst müsste ich ja mit dem verweisoperator BasisForm-&gt;isTraffic arbeiten, wenn ich nicht die instanz meine, sondern nur die BasisForm ansich. soweit auch klar. Jetzt aber das problem:</p>
<p>Mir ist aufgefallen das die 3rd party komponenten sowie die indy ftp komponente ohne probleme <strong>ohne</strong> den zugriff mit dem this zeiger, in der entsprechenden instanz arbeiten. <strong>ABER</strong> ein TTimer muss anscheinend tatsächlich mit dem this zeiger angesprochen werden. Jetzt frage ich mich, wieso? Alle komponenten auf der BasisForm werden ja von der klasse verwaltet, auch TTimer, wie indy und alle anderen. Jedesmal wenn ich dann eine neue instanz erzeuge werden ja alle komponenten sowie elementvariablen mit erzeugt. Nur ist mir eben aufgefallen das ich auf den Timer ohne this zeiger dann anscheinend auf den normalen Timer der form (also nicht der, der instanz) zugreife. Indy und die anderen 3rd party komponenten kann ich ohne den this zeiger ansprechen. Schnall ich nun echt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121174/der-this-zeiger-wann</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 00:59:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121174.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Sep 2005 05:39:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 05:39:10 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Grundsätzlich ist mir der sinn des this Zeiger klar. Jedoch hat mich letztens etwas doch nachdenklich gemacht. ich schildere mal. Ich erstelle von einer BasisForm mehrfach-instanzen zur Laufzeit. Auf der BasisForm habe ich zur designtime ein paar standard komponenten (timer etc.) sowie 3rd party komponenten drauf getan. Sowohl visuelle und nicht visuelle (indy ftp z.b.). Desweiteren habe ich in der klasse der basis form noch ein paar elementvariablen als public/private sowie ein paar methoden So, jetzt meine frage:</p>
<p><em>(alles spielt sich direkt in der instanz der basis form ab. events etc.)</em><br />
Wann muss man in diesem fall nun den this zeiger anwenden und wann nicht? grundsätzlich dachte ich für die elementvariablen: nein. für die form selber: ja. Weil z.B. BasisForm-&gt;Caption würde dann ja nicht die caption der instanz, sondern der BasisForm selber ändern, richtig oder? also muss für die form (instanz davon) selber immer mit this-&gt;Caption gearbeitet werden, klar soweit. bei den elementvariablen muss es ja nicht sein da es ja keine dereferenzierengs möglichkeit gibt. z.b. isTraffic würde ja immer nur im gleichen objekt bzw. in der instanz, die es betrifft sein. sonst müsste ich ja mit dem verweisoperator BasisForm-&gt;isTraffic arbeiten, wenn ich nicht die instanz meine, sondern nur die BasisForm ansich. soweit auch klar. Jetzt aber das problem:</p>
<p>Mir ist aufgefallen das die 3rd party komponenten sowie die indy ftp komponente ohne probleme <strong>ohne</strong> den zugriff mit dem this zeiger, in der entsprechenden instanz arbeiten. <strong>ABER</strong> ein TTimer muss anscheinend tatsächlich mit dem this zeiger angesprochen werden. Jetzt frage ich mich, wieso? Alle komponenten auf der BasisForm werden ja von der klasse verwaltet, auch TTimer, wie indy und alle anderen. Jedesmal wenn ich dann eine neue instanz erzeuge werden ja alle komponenten sowie elementvariablen mit erzeugt. Nur ist mir eben aufgefallen das ich auf den Timer ohne this zeiger dann anscheinend auf den normalen Timer der form (also nicht der, der instanz) zugreife. Indy und die anderen 3rd party komponenten kann ich ohne den this zeiger ansprechen. Schnall ich nun echt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876735</guid><dc:creator><![CDATA[TimmyTammy]]></dc:creator><pubDate>Wed, 21 Sep 2005 05:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 05:46:45 GMT]]></title><description><![CDATA[<p>eine möglichkeit die mir grad einfiel:<br />
Kommt es drauf an in welchem event auf etwas zugegriffen wird? Wenn z.B. ein event das die form selber betrifft, wie z.B. OnShow, dann mit this zeiger. Wenn ein event das von TMainMenu Item ausgelöst wurde, dann ohne this zeiger möglich. kann das sein? Wäre irgendwie logisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876738</guid><dc:creator><![CDATA[TimmyTammy]]></dc:creator><pubDate>Wed, 21 Sep 2005 05:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 06:03:47 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>verstehe nicht wo dein Problem liegt. Wenn ein Control oder Variable (und Controls sind letztens Endes auch bloß Variablen, also Pointer auf Instanzen) Member eines Forms ist, kannst du in Mehtoden dieses Forms <strong>immer</strong> mit this oder ohne this drauf zugreifen. Das this brauchst du nur, wenn Namenskonflikte zwischen Membern und Parametern hast. Und das solltest du eh vermeiden.<br />
Nur den Verweis über die vom Builder automatisch angelegte Instanz (also die genauso heißt wie die Formklasse, nur ohne T) solltest du nicht benutzen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876740</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 21 Sep 2005 06:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 07:18:08 GMT]]></title><description><![CDATA[<p>Ich dachte immer, dass der this-Zeiger nur für die Leute ist, die sich die Variablen- und Funktionsnamen ihrer Objekte nicht merken können. <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/876781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876781</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Sep 2005 07:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 08:27:26 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Ich dachte immer, dass der this-Zeiger nur für die Leute ist, die sich die Variablen- und Funktionsnamen ihrer Objekte nicht merken können. <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>
</blockquote>
<p>zu 99% richtig, was die verwendung angeht.<br />
aber das 1% am rande reicht, um das sprachmittel zu brauchen:</p>
<pre><code class="language-cpp">Window::setVisible(){
   theOneAndOnlyGlobaleListOfVisibleWindowsAndOtherGraphicalElements.insert(this);
}
Window::setInvisible(){
   theOneAndOnlyGlobaleListOfVisibleWindowsAndOtherGraphicalElements.remove(this);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/876848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876848</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 21 Sep 2005 08:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 08:35:19 GMT]]></title><description><![CDATA[<p>1 % ist untertrieben. Braucht man öfters.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876854</guid><dc:creator><![CDATA[this-that]]></dc:creator><pubDate>Wed, 21 Sep 2005 08:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 08:40:47 GMT]]></title><description><![CDATA[<p>this-that schrieb:</p>
<blockquote>
<p>1 % ist untertrieben. Braucht man öfters.</p>
</blockquote>
<p>ok. ich mach wenig gui. ich brauch's seltener. hab nicht eingerechnet, daß ich im BCB-forum bin, ich dummerle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876860</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 21 Sep 2005 08:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 09:11:05 GMT]]></title><description><![CDATA[<p>Was die GUI-Objekte im BCB angeht, fällt mir kein einziger Fall ein, wo ich den this Zeiger benötige.<br />
Die ganzen WinAPI Sachen verwendet man im BCB nicht direkt. Dafür hat man ja schließlich die VCL (ok, ganz ohne WinAPI kommt man nicht aus...).</p>
<p>Kann mir jemand ein praktisches Beispiel geben, bei dem ich nicht auf this verzichten kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876878</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Sep 2005 09:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 09:35:16 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Kann mir jemand ein praktisches Beispiel geben, bei dem ich nicht auf this verzichten kann?</p>
</blockquote>
<p>Wir arbeiten öfters mit dem Observer-Pattern, das nach dem Schema abläuft:</p>
<p>Object bietet Methoden zum (De-)Registrieren von Observern:</p>
<pre><code class="language-cpp">class Object
{
   public:
      void addObserver(Observer observer);
      void removeObserver(Observer observer);
};
</code></pre>
<p>Der Observer muss (wie üblich) irgendeine Form einer update-Methode implementieren:</p>
<pre><code class="language-cpp">class Observer  // interface
{
   virtual void update(Object object) = 0;
}
</code></pre>
<p>Will sich ein Observer selbst beim Object registrieren, dann tut er das über this:</p>
<pre><code class="language-cpp">// irgendwo innerhalb einer Klasse, die Observer implementiert
  Object* object = new Object();
  object-&gt;addObserver(this);
</code></pre>
<p>Ein Object würde natürlich seine Observer auch über this über Änderungen benachrichtigen:</p>
<pre><code class="language-cpp">// irgendwo innerhalb des Objects
   for (int i = 0; i &lt; Observers-&gt;Count; ++i)
      Observers-&gt;update(this);
</code></pre>
<p>Immer wenn sich ein Objekt selbst übergeben muss (das müssen wir ja alle irgendwann), wird es um this kaum herumkommen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876911</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 21 Sep 2005 09:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 10:40:19 GMT]]></title><description><![CDATA[<p>ok, danke.<br />
Aber:</p>
<p>Alexander Kempf schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// irgendwo innerhalb einer Klasse, die Observer implementiert
  Object* object = new Object();
  object-&gt;addObserver(this);
</code></pre>
</blockquote>
<p>Hier hätte statt this auch object angegeben werden können.</p>
<p>Alexander Kempf schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// irgendwo innerhalb des Objects
   for (int i = 0; i &lt; Observers-&gt;Count; ++i)
      Observers-&gt;update(this);
</code></pre>
</blockquote>
<p>Ok, hier kommt man ohne this wohl wirklich nicht aus. <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/876962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876962</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Sep 2005 10:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 10:43:02 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Hier hätte statt this auch object angegeben werden können.</p>
</blockquote>
<p>Dann würde sich das Objekt selbst über seine eigene Änderung benachrichtigen?<br />
Oder wie meinst Du das?<br />
Möglich wäre höchstens Object und Observer &quot;von außen&quot; zu erstellen, die update-Problematik<br />
bleibt dann aber bestehen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876967</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 21 Sep 2005 10:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to Der this Zeiger - Wann? on Wed, 21 Sep 2005 11:29:14 GMT]]></title><description><![CDATA[<p>Sorry, Denkfehler meinerseits, Du hast natürlich recht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877006</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Sep 2005 11:29:14 GMT</pubDate></item></channel></rss>