<?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[Vererbung und virtuelle Funktionen]]></title><description><![CDATA[<p>Hallo!!</p>
<p>Ich implementiere einen Plug-In Manager für eine Anwendung. Dabei werden derzeit die Daten die im Plug-In zur Verfügung stehen sollen über eine Basisklasse mittels virtueller Funktionen an das Plug-In vererbt. Jedoch stehen dadurch die Daten nur innerhalb der vererbten Funktionen zur Verfügung.<br />
Wie kann ich in Funktionen im Plug-In die nicht in der Basisklasse definiert sind, dennoch auf die übergebenen Daten zugreifen ohne sie innerhalb des Plug-ins zwischen den Funktionen zu übergeben.</p>
<p>Oder anders ausgedrückt: Wie kann ich aus dem Plug-In auf Daten aus dem Hauptprogramm zugreifen (beispielsweise eine get-Methode) ?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184301/vererbung-und-virtuelle-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 17:23:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184301.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jun 2007 07:04:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 07:07:43 GMT]]></title><description><![CDATA[<p>Hallo!!</p>
<p>Ich implementiere einen Plug-In Manager für eine Anwendung. Dabei werden derzeit die Daten die im Plug-In zur Verfügung stehen sollen über eine Basisklasse mittels virtueller Funktionen an das Plug-In vererbt. Jedoch stehen dadurch die Daten nur innerhalb der vererbten Funktionen zur Verfügung.<br />
Wie kann ich in Funktionen im Plug-In die nicht in der Basisklasse definiert sind, dennoch auf die übergebenen Daten zugreifen ohne sie innerhalb des Plug-ins zwischen den Funktionen zu übergeben.</p>
<p>Oder anders ausgedrückt: Wie kann ich aus dem Plug-In auf Daten aus dem Hauptprogramm zugreifen (beispielsweise eine get-Methode) ?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305359</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 07:10:08 GMT]]></title><description><![CDATA[<p>Häh? Kannst du das mal bitte etwas genauer erläutern? (Tip: Ein Code sagt mehr als tausend Worte ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305363</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 07:16:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Bernd1Brot schrieb:</p>
<blockquote>
<p>Oder anders ausgedrückt: Wie kann ich aus dem Plug-In auf Daten aus dem Hauptprogramm zugreifen (beispielsweise eine get-Methode) ?</p>
</blockquote>
<p>Genauso. Also mit einer get-Methode aus dem Hauptprogramm.</p>
<p>Das heißt das Hauptprogramm muß irgendein Interface anbieten, das alle benötigte Daten liefert. Meisten wird dazu im Hauptprogramm eine zentrale Instanz erstellt (Siehe Singleton) das Getter-Methoden für alle wichtigen Daten und Funktionen anbietet. Den Plugin-Basisklassen must du jetzt nur noch einen Pointer auf diese Instanz geben, und alle vererbten Plugins können die Zentrale Instanz nutzen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305368</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Fri, 15 Jun 2007 15:10:08 GMT]]></title><description><![CDATA[<p>Aus dem Hauptprogramm wird in einer Funktion ein int-Wert an die Basisklasse übergeben. Diese Funktion kann ich in der abgeleiteten Klasse reimplementieren und habe in dieser Funktion den int-Wert auch zur Verfügung. Jedoch kann ich in der Kind-Klasse auf den int-Wert ausschließlich in der vererbten Funktion zugreifen oder aus Funktionen die aus der geerbten Funktion aufgerufen werden. Ich möchte aber auch außerhalb dieser Funktionen aus der Kindklasse auf diesen int-Wert zugreifen können.</p>
<pre><code class="language-cpp">Basisklasse:

virtual int getIntWert(int i){};

Kindklasse:

int Kindklasse::getIntWert(int i){

  der Zugriff auf i ist möglich

  berechne();
}

void Kindklasse::berechne(){

  der Zugriff auf i ist möglich
}

void Kindklasse::berechne2(){

  der Zugriff auf i ist nicht möglich
}
</code></pre>
<p>Der Aufruf der Funktion berechne2() erfolgt innerhalb der Kindklasse hat aber keine direkte Verbindung zu den anderen Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305378</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Fri, 15 Jun 2007 15:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 07:53:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du must der Funktion berechne2 einen Pointer auf Basisklasse oder Kindklasse als Parameter mitgeben.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305395</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Fri, 15 Jun 2007 15:11:32 GMT]]></title><description><![CDATA[<p>[quote]Hallo</p>
<p>Du must der Funktion berechne2 einen Pointer auf Basisklasse oder Kindklasse als Parameter mitgeben.</p>
<p>bis bald<br />
akari[/quote]</p>
<p>Die Funktion berechne2() ist ebenfalls in der Kindklasse definiert und soll auf den Wert i der an die Basisklasse übergeben wurde zugreifen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305397</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Fri, 15 Jun 2007 15:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 08:13:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Die Funktion berechne2() ist ebenfalls in der Kindklasse definiert</p>
</blockquote>
<p>Das wird aber aus deinem Codeauszug nicht deutlich! Übrigens sfds</p>
<blockquote>
<p>soll auf den Wert i der an die Basisklasse übergeben wurde zugreifen können.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Dann seh ich dein Problem nicht. Wenn berechne2 genauso wie berechne zu der Kindklasse gehört dann muß berechne2 doch genauso wie berechne auf i zugreifen können.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305406</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 14 Jun 2007 08:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 08:32:45 GMT]]></title><description><![CDATA[<p>Zunächst entschuldige ich mich für das nich vorhandene CodeColoring, aber wie ihr seht habe ich es versucht aber es wird nur der Tag selbst geschrieben.</p>
<p>Wenn ich in berechne2() auf i zugreifen will ist der Zeiger auf den int-Wert nicht gesetzt.</p>
<p>Der Unterschied zwischen berechne() und berechne2() ist, daß ich berechne() aus einer Funktion aufrufe die von der Basisklasse erbt und bei berechne2() ist dies nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305422</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Thu, 14 Jun 2007 08:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 08:40:06 GMT]]></title><description><![CDATA[<p>Du musst die anderen Tags, also &quot;[.i]&quot;, &quot;[./i]&quot; und &quot;[.b]&quot; usw zwischen den Codetags wegwurschteln.</p>
<p>Aber eins verstehe ich nicht: Wenn &quot;berechne&quot; und &quot;berechne2&quot; in ein- und derselben Klasse sind, müssten sie doch beide auf den Integer zugreifen können, <em>vorausgesetzt</em>, dass der Integer eine Membervariable ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305430</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 14 Jun 2007 08:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 08:54:45 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Bernd1Brot schrieb:</p>
<blockquote>
<p>Der Unterschied zwischen berechne() und berechne2() ist, daß ich berechne() aus einer Funktion aufrufe die von der Basisklasse erbt und bei berechne2() ist dies nicht der Fall.</p>
</blockquote>
<p>Es spielt doch keine Rolle von wo aus eine Funktion aufgerufen wird. Wichtig ist was für eine Sichtbarkeit die Funktion selber hat. Und die ist (laut dir) bei berechne und berechne2 die selbe.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305440</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 14 Jun 2007 08:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 09:02:49 GMT]]></title><description><![CDATA[<p>brechne() und berechne2() sind in ein- und derselben Klasse und der int-Wert ist eine Membervariable der Basisklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305447</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Thu, 14 Jun 2007 11:44:55 GMT]]></title><description><![CDATA[<p>Da dein Codeausschnitt sehr unvollständig ist, gehe ich mal etwas anders auf die Sache ein:</p>
<p><strong>Beispiel 1</strong></p>
<pre><code class="language-cpp">class Basisklasse {
  private:
    int a;
  protected:
    int b;
  public:
    int c;
};

class Kindklasse : public Basisklasse {
  public:
    tuWasMitA() { ++a; }; // Fehler: Kein Zugriff auf privaten Member
    tuWasMitB() { ++b; }; // Okay: Zugriff den Abgeleiteten Klassen möglich
    tuWasMitC() { ++c; }; // Okay: Zugriff allen möglich
};
</code></pre>
<p>Bei deinem Beispiel, so knapp wie du es geschrieben hast müsste weder berechne noch berechne2 das i bekannt sein, da es eine Methodenlokale Variable ist, die nirgens übergeben wird. Wenn bitte den Code im ganzen angeben.</p>
<p>Für das folgende Beispiel sind keine Klassen nötig:</p>
<p><strong>Beispiel 2</strong></p>
<pre><code class="language-cpp">void Berechne();

int BerechneWas(int i)
{
  // ...
  Berechne();
  // ...
}

void Berechne()
{
  // Hat keinen Zugriff auf die Variable i der Methode &quot;BerechneWas(int i)&quot;
  // Da sie nie übergeben wurde
}
</code></pre>
<p>Anders sieht es aus wenn du i in irgendeiner Membervariable hinterlegst (egal ob in der Basisklasse oder der abgeleiteten Klasse] möglich ist) dann können alle Methoden darauf zugreifen, sofern die Variable an sich zugreifbar ist [siehe Beispiel 1].</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305606</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und virtuelle Funktionen on Fri, 15 Jun 2007 15:08:31 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Bernd1Brot schrieb:</p>
<blockquote>
<p>Oder anders ausgedrückt: Wie kann ich aus dem Plug-In auf Daten aus dem Hauptprogramm zugreifen (beispielsweise eine get-Methode) ?</p>
</blockquote>
<p>Genauso. Also mit einer get-Methode aus dem Hauptprogramm.</p>
<p>Das heißt das Hauptprogramm muß irgendein Interface anbieten, das alle benötigte Daten liefert. Meisten wird dazu im Hauptprogramm eine zentrale Instanz erstellt (Siehe Singleton) das Getter-Methoden für alle wichtigen Daten und Funktionen anbietet. Den Plugin-Basisklassen must du jetzt nur noch einen Pointer auf diese Instanz geben, und alle vererbten Plugins können die Zentrale Instanz nutzen.</p>
<p>bis bald<br />
akari</p>
</blockquote>
<p>So wie Akari es hier beschrieben hat, habe ich es versucht und es funktioniert. Ich habe eine Interface-Klasse erzeugt und mein Plug-In mit einem Pointer auf die Interface-Klasse instanziert. Dadurch ist der Zugriff auf Bereiche desHauptprogramms nun möglich.</p>
<p>Vielen Dank also für den Vorschlag. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Grüße Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306657</guid><dc:creator><![CDATA[Bernd1Brot]]></dc:creator><pubDate>Fri, 15 Jun 2007 15:08:31 GMT</pubDate></item></channel></rss>