<?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[abgeleitete klassen besitzen gleiche funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>welche Möglichkeit habe ich, wenn eine Basisklasse mehrere abgeleitete Klassen besitzt, die allesamt eine DrawX() Funktion aufweisen? Wie weiß die Basisklasse, welche der abgeleiteten Klassen aufgerufen werden muss?</p>
<pre><code class="language-cpp">//Aufruf in der Basisklasse
DrawX(data);

//definition im header der basisklasse
virtual void DrawX(CByteArray &amp;) PURE;

//definition in abgeleiteter klasseA
virtual void ProcessReceive(CByteArray &amp;data);

//definition in abgeleiteter KlasseB
???? 
virtual void ProcessReceive(CByteArray &amp;data);
</code></pre>
<p>Gruß<br />
Konrad</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267548/abgeleitete-klassen-besitzen-gleiche-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 12:01:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267548.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 May 2010 12:49:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 12:49:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>welche Möglichkeit habe ich, wenn eine Basisklasse mehrere abgeleitete Klassen besitzt, die allesamt eine DrawX() Funktion aufweisen? Wie weiß die Basisklasse, welche der abgeleiteten Klassen aufgerufen werden muss?</p>
<pre><code class="language-cpp">//Aufruf in der Basisklasse
DrawX(data);

//definition im header der basisklasse
virtual void DrawX(CByteArray &amp;) PURE;

//definition in abgeleiteter klasseA
virtual void ProcessReceive(CByteArray &amp;data);

//definition in abgeleiteter KlasseB
???? 
virtual void ProcessReceive(CByteArray &amp;data);
</code></pre>
<p>Gruß<br />
Konrad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902705</guid><dc:creator><![CDATA[Konrad Bauer]]></dc:creator><pubDate>Wed, 26 May 2010 12:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 12:50:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BasisKlasse1::ProcessReceive(...);
  BasisKlasse2::ProcessReceive(...);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1902706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902706</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 26 May 2010 12:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 12:55:40 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<pre><code class="language-cpp">BasisKlasse1::ProcessReceive(...);
  BasisKlasse2::ProcessReceive(...);
</code></pre>
</blockquote>
<p>ich habe eine Basisklasse mit mehreren abgeleiteten Klassen, die allesamt diese Funktion besitzen. Und aus der Basisklasse möchte ich gern die richtige abgeleitete Klasse aufrufen.</p>
<p>Geht das auch mit einer zweiten Variable im Funktionsaufruf, die eindeutig kennzeichnen würde, dass es sich um KlasseA oder KlasseB handelt?</p>
<p>ProcessReceive(data, 1) -&gt; abgeleitete Funktion in KlasseA aufrufen<br />
ProcessReceive(data, 2) -&gt; abgeleitete Funktion in KlasseB aufrufen</p>
<p>Wie müsste dann die Deklaration der abgeleiteten Klasse aussehen?</p>
<p>Konrad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902713</guid><dc:creator><![CDATA[Konrad Bauer]]></dc:creator><pubDate>Wed, 26 May 2010 12:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 12:58:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class A
{
  public:
    void doIt();
};

class B
{
  public:
    void doIt();
};

class C : public A, public B
{
  public:
    void doAll()
    {
       A::doIt();
       B::doIt();
    }
};
</code></pre>
<p>So.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902714</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 26 May 2010 12:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:02:20 GMT]]></title><description><![CDATA[<p>bei mir ist es genau andersherum:</p>
<pre><code class="language-cpp">class A : public X 
{
protected:
   virtual void Process() PURE;
}

class B : public class A
{
protected:
  virtual void Process();

}

class C : public class A:
{
protected:
 virtual void Process();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1902717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902717</guid><dc:creator><![CDATA[Konrad Bauer]]></dc:creator><pubDate>Wed, 26 May 2010 13:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:03:04 GMT]]></title><description><![CDATA[<p>Scheint mir doch sehr aneinander vorbei geredet...</p>
<blockquote>
<p>Wie weiß die Basisklasse, welche der abgeleiteten Klassen aufgerufen werden muss?<br />
...<br />
Und aus der Basisklasse möchte ich gern die richtige abgeleitete Klasse aufrufen.</p>
</blockquote>
<p>Da musst du nix machen. Sofern diese Funktion virtuell ist, wird die 'richtige' aufgerufen (die, welche dem Typ der Instanz entspricht).<br />
Ausser du meinst mit 'richtige' was anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902718</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 26 May 2010 13:03:04 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:04:25 GMT]]></title><description><![CDATA[<p>Was ist <strong>PURE</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902719</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 26 May 2010 13:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:05:30 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Was ist <strong>PURE</strong>?</p>
</blockquote>
<p>Wird wohl ein '= 0' Makro sein. =&gt; Weg damit!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902721</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 26 May 2010 13:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:07:06 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Was ist <strong>PURE</strong>?</p>
</blockquote>
<p>bedeutet lediglich, dass nur die abgeleiteten Klassen eine entsprechende Funktion (subclass) bereitstellen.</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Da musst du nix machen. Sofern diese Funktion virtuell ist, wird die 'richtige' aufgerufen (die, welche dem Typ der Instanz entspricht).<br />
Ausser du meinst mit 'richtige' was anderes.</p>
</blockquote>
<p>das Problem ist hier, dass beide abgeleiteten Klassen den gleichen Aufruf besitzen und ich diese Funktion nicht mittels eines Objects aufrufe.</p>
<pre><code class="language-cpp">virtual void Process(CByteArray &amp;data);
</code></pre>
<p>und der Aufruf in der Basisklasse ist</p>
<pre><code class="language-cpp">Process(data);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1902723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902723</guid><dc:creator><![CDATA[Konrad Bauer]]></dc:creator><pubDate>Wed, 26 May 2010 13:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:09:46 GMT]]></title><description><![CDATA[<p>Richtig. Und in deinem Beispiel wir Process von class B bzw class C aufgerufen. Was genau willst du denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902725</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 26 May 2010 13:09:46 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:13:27 GMT]]></title><description><![CDATA[<p>Konrad Bauer schrieb:</p>
<blockquote>
<p>und der Aufruf in der Basisklasse ist</p>
<pre><code class="language-cpp">Process(data);
</code></pre>
</blockquote>
<p>Aber dieser Aufruf steht seinerseits innerhalb einer Memberfunktion; wäre Sie statisch, liesse sich das nicht kompilieren.<br />
Also existiert doch ein Objekt und von diesem Objekt hängt ab, welche Variante aufgerufen wird.</p>
<p>Edit: Oder rufst du das im Konstruktor auf? Dann ginge das so tatsächlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902728</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 26 May 2010 13:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:11:38 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Richtig. Und in deinem Beispiel wir Process von class B bzw class C aufgerufen. Was genau willst du denn?</p>
</blockquote>
<p>nein Process() wird innerhalb von der Klasse A (Basisklasse) aufgerufen -&gt; die jetzt ebend entscheiden muss welche abgeleitete Klasse (B oder C) ausgewählt werden soll!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902729</guid><dc:creator><![CDATA[Konrad Bauer]]></dc:creator><pubDate>Wed, 26 May 2010 13:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 13:26:43 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Richtig. Und in deinem Beispiel wir Process von class B bzw class C aufgerufen. Was genau willst du denn?</p>
</blockquote>
<p>HÄ?!</p>
<p>Welchen Typ hat das Objekt denn?<br />
Entweder es ist vom Typ B oder C und entsprechend wird die Funktion aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902740</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 26 May 2010 13:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to abgeleitete klassen besitzen gleiche funktion on Wed, 26 May 2010 14:08:29 GMT]]></title><description><![CDATA[<p>Konrad Bauer schrieb:</p>
<blockquote>
<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Richtig. Und in deinem Beispiel wir Process von class B bzw class C aufgerufen. Was genau willst du denn?</p>
</blockquote>
<p>nein Process() wird innerhalb von der Klasse A (Basisklasse) aufgerufen -&gt; die jetzt ebend entscheiden muss welche abgeleitete Klasse (B oder C) ausgewählt werden soll!</p>
</blockquote>
<p>Meinst Du vielleicht sowas?</p>
<pre><code class="language-cpp">struct A
{
   void doIt() {Process();}
   virtual void Process() = 0;
};

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

struct C : A
{
 virtual void Process() { cout &lt;&lt; &quot;A\n&quot;; };
};
</code></pre>
<p>Wenn ja: Dann hast Du kein Problem, weil Du letztlich beim konkreten Aufruf trotzdem auf jeden Fall ein B- oder ein C-Objekt in der Hand hast (ein A-Objekt kannst Du ja nicht instantiieren, weil es abstrakt ist (=eine rein virtuelle Funktion hat)).</p>
<pre><code class="language-cpp">int main() {
   B b;
   b.doIt();
   C c;
   c.doIt();
   return 0;
}
</code></pre>
<p>Vielleicht machst Du Dir das Leben ein wenig einfacher, wenn Du zwischen einer <em>Klasse</em> (= Strukturfestlegung) und einem <em>Objekt</em> (oder <em>Instanz</em>) (= Datensatz, der dieser Strukturfestlegung gemaäß erzeugt wurde) unterscheidest.</p>
<p>BTW: Genau DAS ist der Sinn virtueller Funktionen. <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1902755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1902755</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 26 May 2010 14:08:29 GMT</pubDate></item></channel></rss>