<?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[Korrekte Methode aufrufen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgendes Problem. Ich habe eine Basisklasse von der leiten sich mehrere Klassen ab. Ich habe jetzt eine Funktion die als Parameter einen Pointer auf die Basisklasse bekommt und diese Funktion soll jetzt je nachdem welche Klasse als Parameter angegeben ist die korrekte Funktion aufrufen. Vielleicht ist es besser wenn ich den Code zeige:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A {
public:
	virtual A* getObject() {
		return this;
	}
};

class B: public A {
	virtual A* getObject() {
		return this;
	}
};

class C: public A {
	virtual A* getObject() {
		return this;
	}
};

void foo(A* pA) {
	cout &lt;&lt; &quot;A&quot;;
}

void foo(B* pB) {
	cout &lt;&lt; &quot;B&quot;;
}

void foo(C* pC) {
	cout &lt;&lt; &quot;C&quot;;
}

void give(A* pA) {
	foo(pA-&gt;getObject());
}

int main() {
	B* pB = new B();
	C* pC = new C();
	give(pB); // Output A but i want B
	give(pC); // Output A but i want C
	return 0;
}
</code></pre>
<p>Wie würde ich das am elegantesten und effizientesten machen?</p>
<p>Vielen herzlichen Dank!</p>
<p>Lg Cplusplusler</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301651/korrekte-methode-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 21:43:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301651.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Mar 2012 22:04:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Korrekte Methode aufrufen on Sat, 31 Mar 2012 22:04:36 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgendes Problem. Ich habe eine Basisklasse von der leiten sich mehrere Klassen ab. Ich habe jetzt eine Funktion die als Parameter einen Pointer auf die Basisklasse bekommt und diese Funktion soll jetzt je nachdem welche Klasse als Parameter angegeben ist die korrekte Funktion aufrufen. Vielleicht ist es besser wenn ich den Code zeige:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A {
public:
	virtual A* getObject() {
		return this;
	}
};

class B: public A {
	virtual A* getObject() {
		return this;
	}
};

class C: public A {
	virtual A* getObject() {
		return this;
	}
};

void foo(A* pA) {
	cout &lt;&lt; &quot;A&quot;;
}

void foo(B* pB) {
	cout &lt;&lt; &quot;B&quot;;
}

void foo(C* pC) {
	cout &lt;&lt; &quot;C&quot;;
}

void give(A* pA) {
	foo(pA-&gt;getObject());
}

int main() {
	B* pB = new B();
	C* pC = new C();
	give(pB); // Output A but i want B
	give(pC); // Output A but i want C
	return 0;
}
</code></pre>
<p>Wie würde ich das am elegantesten und effizientesten machen?</p>
<p>Vielen herzlichen Dank!</p>
<p>Lg Cplusplusler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197445</guid><dc:creator><![CDATA[Cplusplusler]]></dc:creator><pubDate>Sat, 31 Mar 2012 22:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Korrekte Methode aufrufen on Sat, 31 Mar 2012 22:11:30 GMT]]></title><description><![CDATA[<p>Wenn das erst zur Laufzeit bekannt ist mit einer virtuellen Methode. (Oder wenn du faul bist.) Sonst mir CRTP. <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>
<p>Edit:<br />
Keine Ahnung was dieses virtual getObject da bringen soll, Polymorphie geht so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A { virtual void foo() { std::cout &lt;&lt; &quot;A\n&quot;; } };
struct B : public A { virtual void foo() { std::cout &lt;&lt; &quot;B\n&quot;; } };

void bar(A&amp; a)
{
  a.foo();
}

int main()
{
  B b;
  bar(b);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2197446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197446</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 31 Mar 2012 22:11:30 GMT</pubDate></item></channel></rss>