<?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[Static-Methode in abstrakter Basisklasse]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte eine abstrakte Basisklasse erstellen, die dann andere Klassen, die davon erben, dazu zwingen soll bestimmte Methoden zu implementieren.</p>
<p>Jetzt kommt's: Ich will die erbenden Klassen irgendwie dazu zwingen eine bestimmte static Methode zu implementieren. Ich weiß aber nicht wie die Syntax dafür aussieht? static und virtual beisst sich laut Compiler.</p>
<p>Geht das überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148770/static-methode-in-abstrakter-basisklasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 00:57:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148770.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 May 2006 10:55:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 10:55:50 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte eine abstrakte Basisklasse erstellen, die dann andere Klassen, die davon erben, dazu zwingen soll bestimmte Methoden zu implementieren.</p>
<p>Jetzt kommt's: Ich will die erbenden Klassen irgendwie dazu zwingen eine bestimmte static Methode zu implementieren. Ich weiß aber nicht wie die Syntax dafür aussieht? static und virtual beisst sich laut Compiler.</p>
<p>Geht das überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067955</guid><dc:creator><![CDATA[statisch]]></dc:creator><pubDate>Tue, 30 May 2006 10:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 10:59:30 GMT]]></title><description><![CDATA[<p>Nope geht nicht, da Du beim aufrufen statischer Funktionen kein polymorphes Objekt haben musst sondern die gewünschte Klasse direkt adressieren kannst. Welchen Pfad in der Hierarchie sollte der Compiler dann verfolgen, wenn du AbstractClass::StaticMethod() aufrufst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067956</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 30 May 2006 10:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 11:08:48 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Nope geht nicht, da Du beim aufrufen statischer Funktionen kein polymorphes Objekt haben musst sondern die gewünschte Klasse direkt adressieren kannst. Welchen Pfad in der Hierarchie sollte der Compiler dann verfolgen, wenn du AbstractClass::StaticMethod() aufrufst.</p>
</blockquote>
<p>aber die ist ja virtual, also sowas wie</p>
<p>AbstractClass::VirtualStaticMethod()</p>
<p>Sprich die abstrakte basisklasse hat diese static methode nicht, aber die davon erbenden müssen sie implementieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067965</guid><dc:creator><![CDATA[hmmm4546]]></dc:creator><pubDate>Tue, 30 May 2006 11:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 11:12:15 GMT]]></title><description><![CDATA[<p>Nein, geht wirklich nicht. Schon gar nicht, wenn Base die Methode foo nicht hat, aber Derive foo implementieren muss.</p>
<p>Edit: virtual und static in der Kombo bringt's echt nicht.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067967</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 30 May 2006 11:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 11:12:00 GMT]]></title><description><![CDATA[<p>Bei einer virtuellen Methode wird anhand der vtable ermittelt welchen Typ das verwendete Objekt (*this) tatsächlich hat und die &quot;richtige&quot; Methode dazu ausgewählt. Eine statische Methode hat keinen this-Zeiger - also woher soll die bitteschön wissen, welche Klassenmethode jetzt verwendet werden soll?<br />
(denk mal drüber nach)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067969</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 May 2006 11:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 11:13:07 GMT]]></title><description><![CDATA[<p>hmmm4546 schrieb:</p>
<blockquote>
<p>aber die ist ja virtual, also sowas wie</p>
<p>AbstractClass::VirtualStaticMethod()</p>
<p>Sprich die abstrakte basisklasse hat diese static methode nicht, aber die davon erbenden müssen sie implementieren</p>
</blockquote>
<p>Damit widersprichst Du Dir selbst - Du addressierst direkt die Klasse AbstractClass und erwartest vom Compiler eine der Ableitungen (BTW, welche bitte?) zu suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067971</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 30 May 2006 11:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 11:18:11 GMT]]></title><description><![CDATA[<p>was hättest du davon, wenn eine methode virtual ist, obwohl sie nicht von einem objekt abhängt?<br />
was stellst du dir vor, soll mit den statischen methoden der subklassen passieren, wenn du die statische methode der basisklasse aufrufst?<br />
soll per zufall irgendeine subklasse gewählt werden und deren statische methode aufgerufen werden?<br />
sollen die statischen methoden aller subklassen aufgerufen werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067972</guid><dc:creator><![CDATA[gegenfrager]]></dc:creator><pubDate>Tue, 30 May 2006 11:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 14:48:25 GMT]]></title><description><![CDATA[<p>Ich glaube er meint folgendes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A {
    static void F() { std::cout &lt;&lt; &quot;A&quot; &lt;&lt; std::endl; }
};

struct B : public A {
    static void F() { std::cout &lt;&lt; &quot;B&quot; &lt;&lt; std::endl; }
};

int main() {
    A a;
    a.F();
    B b;
    b.F();
    A* p = new A;
    p-&gt;F();
    delete p;
    p = new B;
    p-&gt;F();
    delete p;
}
</code></pre>
<p>Würde static und virtual gehen, dann käme B beim letzten Aufruf herraus, doch überleg dir was der Kompiler machen muss: Er muss schauen welcher Typ sich hinter dem Zeiger versteckt, wenn die virtuelle Funktion aufgerufen wird, und wenn er das macht, ist der Vorteil von static schon fast weg, allerdings auch nur fast.</p>
<p>Also eigentlich müsste es doch möglich sein static und virtual zusammen zu benutzen, und es würde doch auch Sinn ergeben, oder? Ich meine jetzt: Sind static-Methoden nicht nen kleinen Tick schneller, da sie keinen Zeiger auf ihre Instanz erhalten? Oder ist das egal?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068152</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 30 May 2006 14:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 14:55:05 GMT]]></title><description><![CDATA[<p>Was er meint ist schon klar <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="😉"
    /> aber in diesem Fall macht der Compiler aus p-&gt;F() ein A::F(), weil ihn das Objekt überhaupt nicht interessiert. Da eine statische Funktion kein this-Argument hat, braucht der Compiler das Objekt <strong>nur</strong>, um die Klasse zu ermitteln (und der Zeiger p ist nunmal vom Typ A).</p>
<p>Wäre o.a. möglich, würde nicht nur der Compiler mehr zu tun haben, er müsste hier (und <strong>nur</strong> hier!) auch protestieren wenn A::F() direkt angesprochen wird, denn wo sucht er jetzt die Virtualität? Implizit garnicht würde mir nicht wirklich sonderlich gut gefallen <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/1068158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068158</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 30 May 2006 14:55:05 GMT</pubDate></item><item><title><![CDATA[Reply to Static-Methode in abstrakter Basisklasse on Tue, 30 May 2006 15:02:08 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Also eigentlich müsste es doch möglich sein static und virtual zusammen zu benutzen, und es würde doch auch Sinn ergeben, oder? Ich meine jetzt: Sind static-Methoden nicht nen kleinen Tick schneller, da sie keinen Zeiger auf ihre Instanz erhalten? Oder ist das egal?</p>
<p>mfg.</p>
</blockquote>
<p>das geschwindigkeits-'problem' bei virtuellen funktionen besteht primär in dem indirektenaufruf, der die sprungvorhersage heutiger prozessoren verhindert (mittels profiling informationen hat der compiler hier allerdings verschiedene möglichkeiten, das zu umgehen, gleichfalls bei JIT compilern oder selbstmodifizierendem code). evtl. ist etwas pseudo-virtuelles in der art gesucht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A {
    A() : f(&amp;A::f_) {}
    void (*f)();
private:
    static void f_() { std::cout &lt;&lt; &quot;A&quot; &lt;&lt; std::endl; }
};

struct B : public A {
    B() { f = &amp;B::f_; }
private:
    static void f_() { std::cout &lt;&lt; &quot;B&quot; &lt;&lt; std::endl; }
};

int main() {
    A a;
    a.F();
    B b;
    b.F();
    A* p = new A;
    p-&gt;f();
    delete p;
    p = new B;
    p-&gt;f();
    delete p;
}
</code></pre>
<p>alternativ könnte man einen container benutzen, der die zuordnung zwischen typeinfo und zeiger bewirkt und so den zusätzlichen zeiger in jeder instanz vermeiden. im prinzip aber trotzdem sinnlos, eine virtuelle const memberfunktion ist genauso nützlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068162</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 30 May 2006 15:02:08 GMT</pubDate></item></channel></rss>