<?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[Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt]]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein bestimmtes Interface. Dieses sieht auch vor, dass Klassen, die das Interface implementieren, ein paar bestimmte statische Methoden zur Verfügung stellen sollen. Kann ich die Kindklassen irgendwie dazu zwingen, diese Methoden zu implementieren? Man kann ja nicht static void method()=0; schreiben, daher suche ich eine andere Methode.</p>
<p>Als motivierendes Beispiel denke ich an sowas:</p>
<pre><code class="language-cpp">class Elementarteilchen{
 /* Jedes Elementarteilchen hat einen Ort und Impuls (ich mache hier im Beispiel klassische Physik).
    Ort und Impuls sind für jedes konkrete Teilchen verschieden */ 
 double position[3]; 
 double momentum[3];    

 /* Jedes Elementarteilchen hat eine Ladung, aber die ist für alle Teilchen einer Art gleich */
 static double charge;
};

class Elektron : public Elementarteilchen{
 // Wie kann ich Elektron dazu zwingen, dass es ein Member charge hat?
}
</code></pre>
<p>edit: Mit etwas Überlegungen zu meinem Design hat sich das Problem quasi erledigt. Auf das Beispiel übertragen ist die Ladung jetzt zwar keine Teilcheneigenschaft mehr wie man es erwarten würde, sondern von den Funktionen die die Ladungen verwenden. Aber ich will ja kein Physikbuch schreiben, sondern ein Computerprogramm.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248002/kindklassen-zwingen-eine-statische-methode-zu-implementieren-hat-sich-erledigt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 08:59:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248002.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Aug 2009 15:14:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:26:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein bestimmtes Interface. Dieses sieht auch vor, dass Klassen, die das Interface implementieren, ein paar bestimmte statische Methoden zur Verfügung stellen sollen. Kann ich die Kindklassen irgendwie dazu zwingen, diese Methoden zu implementieren? Man kann ja nicht static void method()=0; schreiben, daher suche ich eine andere Methode.</p>
<p>Als motivierendes Beispiel denke ich an sowas:</p>
<pre><code class="language-cpp">class Elementarteilchen{
 /* Jedes Elementarteilchen hat einen Ort und Impuls (ich mache hier im Beispiel klassische Physik).
    Ort und Impuls sind für jedes konkrete Teilchen verschieden */ 
 double position[3]; 
 double momentum[3];    

 /* Jedes Elementarteilchen hat eine Ladung, aber die ist für alle Teilchen einer Art gleich */
 static double charge;
};

class Elektron : public Elementarteilchen{
 // Wie kann ich Elektron dazu zwingen, dass es ein Member charge hat?
}
</code></pre>
<p>edit: Mit etwas Überlegungen zu meinem Design hat sich das Problem quasi erledigt. Auf das Beispiel übertragen ist die Ladung jetzt zwar keine Teilcheneigenschaft mehr wie man es erwarten würde, sondern von den Funktionen die die Ladungen verwenden. Aber ich will ja kein Physikbuch schreiben, sondern ein Computerprogramm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762956</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:26:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename&gt;
class Elementarteilchen
{
protected:
 /* Jedes Elementarteilchen hat einen Ort und Impuls (ich mache hier im Beispiel klassische Physik).
    Ort und Impuls sind für jedes konkrete Teilchen verschieden */ 
 double position[3]; 
 double momentum[3];    

 /* Jedes Elementarteilchen hat eine Ladung, aber die ist für alle Teilchen einer Art gleich */
 static double charge;
};

class Elektron : private Elementarteilchen&lt;Elektron&gt;
{
};
</code></pre>
<p>Ich habe dieses System benutzt, als ich bei meiner Garbage Collection verschiedene Sets von verwalteten Zeigern implementiert habe. Jedes Set hat die gleichen statischen Member, die jedoch andere Werte aufweisen. Du kannst wenn nötig auch noch eine Spezialisierung <code>Elementarteilchen&lt;void&gt;</code> in die Hierarchie einbauen... <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762966</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:27:49 GMT]]></title><description><![CDATA[<p>Elektron hat ja eine Member charge.. Die ist atm bei dir halt noch privat, aber das spielt ja keine Rolle..<br />
Oder willst du Memberfunktionen? - Da bin ich bei deinem Beschreib nicht ganz sicher..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762967</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:28:53 GMT]]></title><description><![CDATA[<p>Werde mir die Methode von /rant/ mal angucken. Sieht gut aus, besser jedenfalls als das was ich im edit des ersten Posts vorgeschlagen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762968</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:29:18 GMT]]></title><description><![CDATA[<p>Ev. sowas?</p>
<pre><code class="language-cpp">template &lt;typename Derived&gt;
class StaticInterface
{
    static long requireGetTheValueFunction()
    {
        return Derived::getTheValue();
    }
};

struct MyClass : public StaticInterface&lt;MyClass&gt;
{
    static long getTheValue()
    {
        return 3;
    }
};

int main()
{
    long theValue = MyClass::getTheValue();
    theValue;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1762969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762969</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:29:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:33:38 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Elektron hat ja eine Member charge.. Die ist atm bei dir halt noch privat, aber das spielt ja keine Rolle..<br />
Oder willst du Memberfunktionen? - Da bin ich bei deinem Beschreib nicht ganz sicher..</p>
</blockquote>
<p>Ok, habe das public vergessen.</p>
<p>Aber wenn ich charge über Elektron ändere, dann ändere ich auch charge für alle anderen Kindklassen, was nicht im Sinne der Erfindung ist. Die Vorschläge von /rant/ und theta beheben dies.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762974</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 15:57:47 GMT]]></title><description><![CDATA[<p>Ich habe mal ein bisschen rumprobiert, die Vorschläge sind wirklich viel besser, als das was ich mir ausgedacht habe. Für alle die diesen Thread hier später mal lesen, noch eine Beispielimplementierung für einige typische Vererbungsfälle:</p>
<pre><code class="language-cpp">template&lt;typename&gt; class A{
public:
  static int i;
};

template&lt;typename T&gt; class B: public A&lt;B&lt;T&gt; &gt;{
public:
  static int j;
};

class C: public A&lt;C&gt;{
};

class D: public B&lt;D&gt;{
  }; 

template&lt;&gt; int A&lt;C&gt;::i=1;       // Geerbten static Member initialisieren, hier von Klasse C
template&lt;&gt; int B&lt;D&gt;::j=2;       // Siehe Fall 1, aber für Klasse D
template&lt;&gt; int A&lt;B&lt;D&gt; &gt;::i=3;   // Wie Fall 1, aber doppelt vererbt, für D
template&lt;&gt; int A&lt;B&lt;int&gt; &gt;::i=4; // Geerbten static Member initialisieren, aber diesmal für Klasse B. int ist ein Dummyparameter

int main(){
   cout &lt;&lt; C::i &lt;&lt; endl;
   cout &lt;&lt; D::j &lt;&lt; endl;
   cout &lt;&lt; D::i &lt;&lt; endl;
   cout &lt;&lt; B&lt;int&gt;::i &lt;&lt;endl;
}
/* Ausgabe:
1
2
3
4
*/
</code></pre>
<p>Optimal wäre es noch, dass Dummy-int loszuwerden, aber so ist's auch schon schön genug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1762980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762980</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 18 Aug 2009 15:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kindklassen zwingen, eine statische Methode zu implementieren [hat sich erledigt] on Tue, 18 Aug 2009 16:13:51 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>... so ist's auch schon <strong>schön</strong> genug.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1762987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1762987</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 18 Aug 2009 16:13:51 GMT</pubDate></item></channel></rss>