<?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[Methode-Call: this-Pointer]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mehrere Klassen, die alle eine Methode gemeinsam haben. In einem zweiten Thread möchte ich jetzt einen void-Pointer übergeben, welcher immer der this-Pointer einer solchen Klasse ist.</p>
<p>Kann ich jetzt ohne wieder zu casten, abhängig vom this-pointer immer die richtige Klassenmethode aufrufen?</p>
<pre><code class="language-cpp">class Test1
{
   void Testmethode();
};

class Test2
{
   void Testmethode();
};

class Test3
{
   void Test(void *ptr);
};

/* ******* aufruf der funktion ******** */
void Test2::CallFunc()
{
   Test3 work;
   work.Test(this);
}

/* ******** funktion selbst ************ */
void Test3::Test(void *ptr)
{
  ptr-&gt;Testmethode(); 

}
</code></pre>
<p>Geht der letzte Step auch ohne Casten?? Momentan zeigt mir das visualstudio an, dass es leider nicht geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß<br />
Damian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276527/methode-call-this-pointer</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 09:37:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276527.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Nov 2010 20:21:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Wed, 03 Nov 2010 20:21:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mehrere Klassen, die alle eine Methode gemeinsam haben. In einem zweiten Thread möchte ich jetzt einen void-Pointer übergeben, welcher immer der this-Pointer einer solchen Klasse ist.</p>
<p>Kann ich jetzt ohne wieder zu casten, abhängig vom this-pointer immer die richtige Klassenmethode aufrufen?</p>
<pre><code class="language-cpp">class Test1
{
   void Testmethode();
};

class Test2
{
   void Testmethode();
};

class Test3
{
   void Test(void *ptr);
};

/* ******* aufruf der funktion ******** */
void Test2::CallFunc()
{
   Test3 work;
   work.Test(this);
}

/* ******** funktion selbst ************ */
void Test3::Test(void *ptr)
{
  ptr-&gt;Testmethode(); 

}
</code></pre>
<p>Geht der letzte Step auch ohne Casten?? Momentan zeigt mir das visualstudio an, dass es leider nicht geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß<br />
Damian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974849</guid><dc:creator><![CDATA[Damian]]></dc:creator><pubDate>Wed, 03 Nov 2010 20:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Wed, 03 Nov 2010 20:40:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Test3
{
   template&lt;typename T&gt; void Test(T *obj); // besser: void Test(T &amp;obj);
};

template&lt;typename T&gt;
Test3::Test(T *obj) // bzw. void Test(T &amp;obj)
{
  obj-&gt;Testmethode(); // bzw. obj.Testmethode();
}
</code></pre>
<p>Mögliche Verbesserungen noch einmal als Liste:</p>
<ul>
<li>Reference (&amp;-Symbol) anstatt Pointer (*-Symbol)</li>
<li>ev. Testmethode als const deklarieren und einen Verweis auf const annehmen</li>
<li>Vererbung:</li>
</ul>
<pre><code class="language-cpp">class testmethod { virtual void Testmethode() const =0; };
class Test1 : testmethod { virtual void Testmethode() const; };
class Test2 : testmethod { virtual void Testmethode() const; };
// Der Aufruf geht dann einfach:
void Test3::Test(const testmethod &amp;obj) {
  obj-&gt;Testmethode();
}
</code></pre>
<ul>
<li>Visual Studio in den Müll werfen und eine gescheite IDE verwenden.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1974865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974865</guid><dc:creator><![CDATA[templati]]></dc:creator><pubDate>Wed, 03 Nov 2010 20:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Wed, 03 Nov 2010 20:44:30 GMT]]></title><description><![CDATA[<p>Visual Studio ist für Windows eine der gescheitesten IDEs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974870</guid><dc:creator><![CDATA[zzzzzzzzzz]]></dc:creator><pubDate>Wed, 03 Nov 2010 20:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Wed, 03 Nov 2010 21:21:01 GMT]]></title><description><![CDATA[<p>templati schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class testmethod { virtual void Testmethode() const =0; };
class Test1 : testmethod { virtual void Testmethode() const; };
class Test2 : testmethod { virtual void Testmethode() const; };
// Der Aufruf geht dann einfach:
void Test3::Test(const testmethod &amp;obj) {
  obj-&gt;Testmethode();
}
</code></pre>
</blockquote>
<p>Du wolltest sicher öffentlich vererben, nicht wahr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974890</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 03 Nov 2010 21:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Wed, 03 Nov 2010 22:06:04 GMT]]></title><description><![CDATA[<p>Ja, stimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974896</guid><dc:creator><![CDATA[templati]]></dc:creator><pubDate>Wed, 03 Nov 2010 22:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to Methode-Call: this-Pointer on Thu, 04 Nov 2010 11:11:07 GMT]]></title><description><![CDATA[<p>templati schrieb:</p>
<blockquote>
<p>Visual Studio in den Müll werfen und eine gescheite IDE verwenden.</p>
</blockquote>
<p>Da musst ich schmunzeln <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

/*
	Also &quot;void&quot; enthält keine Typinformation, d.h. du musst natürlich casten.
	Da deine Klassen nichts miteinander zu tun haben, müsstest du immer genau zu dem entsprechenden Typ casten ... irgendwie sinnlos.
	Da deine Klassen aber gleiche Methoden aufweisen, spricht doch alles dafür, dass du ein Interface verwendest.
*/
class Interface
{
	public:
		virtual void Testmethode() = 0;
}; 

class Test1 : public Interface
{
	public:
		virtual void Testmethode()
		{
			std::cout &lt;&lt; &quot;Test1&quot;;
		}
};

class Test2 : public Interface
{
	public:
		void Testmethode()
		{
			std::cout &lt;&lt; &quot;Test2&quot;;
		}
};

void callFunc(Interface&amp; r)
{
	r.Testmethode();
}

int main()
{
	Test1 test1;
	Test2 test2;

	callFunc(test1);
	callFunc(test2);

	return 0;
}

/*
	Wichtig für dein Vorhaben ist, dass die Klassen (zumindest die Basisklasse &quot;Interface&quot;) polymorph ist.
	Wäre dies nicht der Fall, würde nicht der Datentyp des Objekts entscheiden, welche Funktion nun aufgerufen wird, sondern der Datentyp der Referenz/Zeiger.

	Eine Klasse ist polymorph, wenn min.1 Methode virtual ist.
	Ist die Basisklasse polymorph, dann ist es die abgeleitete Klasse automatisch polymorph.
*/
</code></pre>
<p>mfg dweb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1975004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975004</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 Nov 2010 11:11:07 GMT</pubDate></item></channel></rss>