<?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[Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen]]></title><description><![CDATA[<p>Wie kann man eine Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen?</p>
<p>Klartext:</p>
<pre><code>class GK {
  public:
    void(GK::*mz)();
    void set(p) {
      mz=p;
    }
    void call() {
      (this-&gt;*aktStatusFunktion)();
    }
};

class AK {
  public:
    void eine methode() {
      cout&lt;&lt;&quot;Hallo&quot;;
    }
};

int main() {
  AK obj;
  obj.set(obj.methode);
  obj.call();
}

//Das ist höchstwahrschienlich sowieso irgendwo falsch...
</code></pre>
<p>Auf jeden Fall bekomme ich die Fehlermeldung, dass ich nicht<br />
<strong>`void (AK::<em>)()' in `void (GK::</em>)()'</strong> zuweisen dürfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181259/methode-einer-abgeleiteten-klasse-einem-methodenzeiger-attribut-der-grundklasse-zuweisen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 06:04:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181259.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 May 2007 14:53:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen on Fri, 11 May 2007 14:53:41 GMT]]></title><description><![CDATA[<p>Wie kann man eine Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen?</p>
<p>Klartext:</p>
<pre><code>class GK {
  public:
    void(GK::*mz)();
    void set(p) {
      mz=p;
    }
    void call() {
      (this-&gt;*aktStatusFunktion)();
    }
};

class AK {
  public:
    void eine methode() {
      cout&lt;&lt;&quot;Hallo&quot;;
    }
};

int main() {
  AK obj;
  obj.set(obj.methode);
  obj.call();
}

//Das ist höchstwahrschienlich sowieso irgendwo falsch...
</code></pre>
<p>Auf jeden Fall bekomme ich die Fehlermeldung, dass ich nicht<br />
<strong>`void (AK::<em>)()' in `void (GK::</em>)()'</strong> zuweisen dürfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283063</guid><dc:creator><![CDATA[obbba]]></dc:creator><pubDate>Fri, 11 May 2007 14:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen on Fri, 11 May 2007 15:05:34 GMT]]></title><description><![CDATA[<p>Sowas?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class GK {
  public:
    void(GK::*mz)();

    template&lt;typename T&gt;
    void set(void(T::*p)()) {
      mz=static_cast&lt;void(GK::*)()&gt;(p);
    }

    void call() {
      (this-&gt;*mz)();
    }
};

class AK : public GK {
  public:
    void eineMethode() {
      std::cout&lt;&lt;&quot;Hallo&quot;;
    }
};

int main() {
  AK obj;
  obj.set(&amp;AK::eineMethode);
  obj.call();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1283075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283075</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Fri, 11 May 2007 15:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen on Fri, 11 May 2007 16:18:39 GMT]]></title><description><![CDATA[<p>Helium schrieb:</p>
<blockquote>
<p>Sowas?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class GK {
  public:
    void(GK::*mz)();

    template&lt;typename T&gt;
    void set(void(T::*p)()) {
      mz=static_cast&lt;void(GK::*)()&gt;(p);
    }

    void call() {
      (this-&gt;*mz)();
    }
};

class AK : public GK {
  public:
    void eineMethode() {
      std::cout&lt;&lt;&quot;Hallo&quot;;
    }
};

int main() {
  AK obj;
  obj.set(&amp;AK::eineMethode);
  obj.call();
}
</code></pre>
</blockquote>
<p>Sinnvoller und weniger fehleranfällig dürfte allerdings die Verwendung einer virtuellen Funktion sein. Dann spart man sich den Cast, indem man von vornherein die in der Basisklasse deklarierte Funktion für die Zuweisung benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283126</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 May 2007 16:18:39 GMT</pubDate></item></channel></rss>