<?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[Klassenfunktion als Parameter übergeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe neulich eine Frage bekommen, bei der ich nicht so ohne weiteres eine Antwort gefunden habe.</p>
<p>Die Beschreibung ist sehr einfach:</p>
<p>Ich habe eine Klasse, in der zwei Klassen-Funktionen vorhanden sind. Nun möche ich die eine Funktion als Parameter für die andere übergeben.<br />
Wie stelle ich es an? Eine globale Funktion oder eine statische ist kein Problem, aber die Kassenfunktion kann nicht so einfach übergeben werden. Aber vielleicht hat da jemand eine Lösung.</p>
<p>Hier ein vereinfachtes Beispiel:</p>
<pre><code class="language-cpp">double foo::GibDieEingabeAus(double Ein)
{
    return Ein;
}
double foo::AddiereEinZurFunktionAnStelleEin(double (*f) (double), double Ein)
{
    return (*f)(Ein) + Ein;
}

// irgendwann aufrufen:
... // geht alles nicht 
    AddiereEinZurFunktionAnStelleEin(&amp;foo::GibDieEingabeAus, 2);
    AddiereEinZurFunktionAnStelleEin(foo::GibDieEingabeAus, 2);
    AddiereEinZurFunktionAnStelleEin(GibDieEingabeAus, 2);
...
</code></pre>
<p>Vielleicht etwas noch zum Hintergrund. Ich habe keine Möglichkeit globale Funktionen zu declarieren und ich brauche beide Funktionen nur in der Klasse, von außen muss man nicht drauf zugreifen können.</p>
<p>Ich bin kein Programmierer, sondern ein Ingenieur, deswegen wäre eine kleine Erklärung zur einer einfachen Lösung das Optimum für mich.</p>
<p>Danke schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285306/klassenfunktion-als-parameter-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:27:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285306.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Apr 2011 06:50:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 06:50:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe neulich eine Frage bekommen, bei der ich nicht so ohne weiteres eine Antwort gefunden habe.</p>
<p>Die Beschreibung ist sehr einfach:</p>
<p>Ich habe eine Klasse, in der zwei Klassen-Funktionen vorhanden sind. Nun möche ich die eine Funktion als Parameter für die andere übergeben.<br />
Wie stelle ich es an? Eine globale Funktion oder eine statische ist kein Problem, aber die Kassenfunktion kann nicht so einfach übergeben werden. Aber vielleicht hat da jemand eine Lösung.</p>
<p>Hier ein vereinfachtes Beispiel:</p>
<pre><code class="language-cpp">double foo::GibDieEingabeAus(double Ein)
{
    return Ein;
}
double foo::AddiereEinZurFunktionAnStelleEin(double (*f) (double), double Ein)
{
    return (*f)(Ein) + Ein;
}

// irgendwann aufrufen:
... // geht alles nicht 
    AddiereEinZurFunktionAnStelleEin(&amp;foo::GibDieEingabeAus, 2);
    AddiereEinZurFunktionAnStelleEin(foo::GibDieEingabeAus, 2);
    AddiereEinZurFunktionAnStelleEin(GibDieEingabeAus, 2);
...
</code></pre>
<p>Vielleicht etwas noch zum Hintergrund. Ich habe keine Möglichkeit globale Funktionen zu declarieren und ich brauche beide Funktionen nur in der Klasse, von außen muss man nicht drauf zugreifen können.</p>
<p>Ich bin kein Programmierer, sondern ein Ingenieur, deswegen wäre eine kleine Erklärung zur einer einfachen Lösung das Optimum für mich.</p>
<p>Danke schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050878</guid><dc:creator><![CDATA[Stanislav]]></dc:creator><pubDate>Mon, 18 Apr 2011 06:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 07:07:11 GMT]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">double foo::GibDieEingabeAus(double Ein) 
{ 
    return Ein; 
} 
double foo::AddiereEinZurFunktionAnStelleEin(double (foo::*f) (double), double Ein) 
{ 
    return (this-&gt;*f)(Ein) + Ein; 
} 

// irgendwann aufrufen: 
... // geht alles nicht 
    AddiereEinZurFunktionAnStelleEin(&amp;foo::GibDieEingabeAus, 2); 
...
</code></pre>
<p>Die Syntax ist etwas seltsam. Warum der Aufruf des Methodenzeigers so aussehen muss, kann ja vielleicht jemand anderes erklären. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2050885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050885</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Apr 2011 07:07:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 07:24:00 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Danke, es funktioniert tadellos.</p>
<p>Aber die Erklärung für den -&gt; Operator würde sehr angebracht sein. Ich habe nicht so die Ahnung, was er macht und warum er hier nun vorhanden sein muss.</p>
<p>Aber jetzt kann ich schon weitermachen, das ist super.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050893</guid><dc:creator><![CDATA[Stanislav]]></dc:creator><pubDate>Mon, 18 Apr 2011 07:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 07:44:42 GMT]]></title><description><![CDATA[<p>Ich rate schon Mal. Wenn man was Falsches sagt, wird man hier oft schnell korrigiert:</p>
<p>Objektzeiger-&gt; sorgt dafür, dass die nachfolgende Funktion als unsichtbares Argument den Zeiger übergeben bekommt. Das ist ja nötig, da jede Methode quasi nur eine Funktion mit Objektzeiger dazu ist.</p>
<p>Klar ist, dass Du Deiner Methode die Adresse einer anderen Methode übergeben hast. Aber die kannst Du ja schlecht ohne Objekt aufrufen. Daher musst Du this-&gt;*bla schreiben. *bla schreibst Du, weil das ja ein Methodenzeiger und keine Methodenreferenz (was es leider nicht gibt) ist. Die Klammerung ist nötig, weil der Funktionsaufrufoperator() (?) stärker bindet als ::.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050904</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Apr 2011 07:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 07:47:58 GMT]]></title><description><![CDATA[<p>Fast, Eisflamme. Das mit der Klammerung ist soweit richtig. Allerdings ist -&gt;* ein eigener, einzelner Operator, der sogar für sich überladen werden kann <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2050906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050906</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 18 Apr 2011 07:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 07:57:07 GMT]]></title><description><![CDATA[<p>Oh. Und betrifft der nur Methodenzeiger oder hat der auch noch andere Gründe? Wie sieht's mit Zeiger-Attributen aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050912</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Apr 2011 07:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 08:39:32 GMT]]></title><description><![CDATA[<p>Meinst du vielleicht sowas? <a href="http://ideone.com/68vcb" rel="nofollow">http://ideone.com/68vcb</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050937</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 18 Apr 2011 08:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 08:52:21 GMT]]></title><description><![CDATA[<p>Hm, nein, aber das ist auch sehr interessant. Ich dachte daran, ob man mit -&gt;* irgendwie auch ein Attribut der Klasse benutzen kann, das ein Zeiger ist. Also quasi bla-&gt;*a statt *(bla-&gt;a) oder so. Aber das geht wohl nicht.</p>
<p>Also könnte man -&gt;* als Klassenmemberzeiger-Zugriffsoperator bezeichnen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050944</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Apr 2011 08:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 09:17:07 GMT]]></title><description><![CDATA[<p>Korrekt <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/2050960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050960</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 18 Apr 2011 09:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion als Parameter übergeben on Mon, 18 Apr 2011 09:20:48 GMT]]></title><description><![CDATA[<p>Suuuuper, wieder was gelernt, dankö.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050965</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Apr 2011 09:20:48 GMT</pubDate></item></channel></rss>