<?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[Kann ein Parent wissen, von welchem Child er aktuell benutzt wird?]]></title><description><![CDATA[<p>Ich habe hier ein rein logisches Problem, habe aber zuwenig Erfahrung mit Objekt-Orientierung. Und zwar habe ich 3 Klassen:</p>
<p>Klasse A: Instanziiert Klasse B<br />
Klasse B: Stammt von Klasse C ab<br />
Klasse C: Eine Klasse mit vielen Standardmethoden</p>
<p>Die Klasse B stammt also von C ab, weil sie neben den C-typischen Methoden auch spezielle eigene Methoden besitzt. Jetzt habe ich das Problem, dass Klasse C eine Methode XYZ verwendet, die Klasse B besitzt, weil sie von mal zu mal unterschiedlich ist. So würde eine Klasse D, die auch von C abstammt, eine noch andere Version dieser Methode XYZ haben.</p>
<p>Wie bringe ich C nun bei, dass es die Methode XYZ von z.B. B benutzen soll und ein anderes mal von D? Gibt es sowas (nur hypothetisch) wie child-&gt;XYZ() ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156948/kann-ein-parent-wissen-von-welchem-child-er-aktuell-benutzt-wird</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 00:38:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156948.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Aug 2006 18:12:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Mon, 21 Aug 2006 18:12:45 GMT]]></title><description><![CDATA[<p>Ich habe hier ein rein logisches Problem, habe aber zuwenig Erfahrung mit Objekt-Orientierung. Und zwar habe ich 3 Klassen:</p>
<p>Klasse A: Instanziiert Klasse B<br />
Klasse B: Stammt von Klasse C ab<br />
Klasse C: Eine Klasse mit vielen Standardmethoden</p>
<p>Die Klasse B stammt also von C ab, weil sie neben den C-typischen Methoden auch spezielle eigene Methoden besitzt. Jetzt habe ich das Problem, dass Klasse C eine Methode XYZ verwendet, die Klasse B besitzt, weil sie von mal zu mal unterschiedlich ist. So würde eine Klasse D, die auch von C abstammt, eine noch andere Version dieser Methode XYZ haben.</p>
<p>Wie bringe ich C nun bei, dass es die Methode XYZ von z.B. B benutzen soll und ein anderes mal von D? Gibt es sowas (nur hypothetisch) wie child-&gt;XYZ() ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121755</guid><dc:creator><![CDATA[JPSelter]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Mon, 21 Aug 2006 18:22:35 GMT]]></title><description><![CDATA[<p>- streichen -</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121757</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Mon, 21 Aug 2006 18:17:10 GMT]]></title><description><![CDATA[<p>Klasse C weiss aber nicht, ob es B::XYZ oder D:XYZ aufrufen soll. Es muss wissen, wer sein aktueller Child ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121759</guid><dc:creator><![CDATA[JPSelter]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Mon, 21 Aug 2006 18:19:07 GMT]]></title><description><![CDATA[<p>siehe virtual.<br />
<a href="http://www.henkessoft.de/C++/Cpp_school/virtual.html" rel="nofollow">http://www.henkessoft.de/C++/Cpp_school/virtual.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121762</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Mon, 21 Aug 2006 18:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Thu, 19 Mar 2009 09:48:14 GMT]]></title><description><![CDATA[<p>Also, so wie ich das verstanden habe, dürfte das - als Code - bei dir so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

// ## Basisklasse C ############################################################
class C
{
public:
    void verwendeMethode() { /* B::XYZ() oder D::XYZ? */ }
private:

};

// ## Abgeleitete Klassen B und D ##############################################
class B : public C
{
public:
    void XYZ() { std::cout &lt;&lt; &quot;Klasse B\n&quot;; }
private:

};

class D : public C
{
public:
    void XYZ() { std::cout &lt;&lt; &quot;Klasse D\n&quot;; }
private:

};

// ## unwichtig für das Beispiel ###############################################
class A
{
public:
    B einB;
private:

};

// ## main: Hauptprogramm ######################################################
int main()
{

    return 0;
}
</code></pre>
<p>Die Lösung ist, wie Erhart Enkes bereits angedeutet hat, folgendes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

// ## Basisklasse C ############################################################
class C
{
public:
    C* child;
    virtual void XYZ() { std::cout &lt;&lt; &quot;Klasse C\n&quot;; }
    void verwendeMethode() { child-&gt;XYZ(); }
private:

};

// ## Abgeleitete Klassen B und D ##############################################
class B : public C
{
public:
    void XYZ() { std::cout &lt;&lt; &quot;Klasse B\n&quot;; }
private:

};

class D : public C
{
public:
    void XYZ() { std::cout &lt;&lt; &quot;Klasse D\n&quot;; }
private:

};

// ## main: Hauptprogramm ######################################################
int main()
{
    C einC;

    einC.child = new B;
    einC.verwendeMethode();
    delete einC.child;

    einC.child = new D;
    einC.verwendeMethode();
    delete einC.child;

    std::cin.get();

    return 0;
}
</code></pre>
<p>Hier kommt die Polymorphie zum Einsatz. Mithilfe von Zeigern und einer virtuellen Tabelle (sog. vtable) kann die Basisklasse zur Laufzeit ermitteln, welche Methode die richtige ist und aufgerufen werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121809</guid><dc:creator><![CDATA[skreutzer]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kann ein Parent wissen, von welchem Child er aktuell benutzt wird? on Mon, 21 Aug 2006 19:42:28 GMT]]></title><description><![CDATA[<p>Perfekt, das ist die Lösung, danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121821</guid><dc:creator><![CDATA[JPSelter]]></dc:creator><pubDate>Mon, 21 Aug 2006 19:42:28 GMT</pubDate></item></channel></rss>