<?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 und vererbung]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine Klasse &quot;Einheit&quot; mit static const int maxHP und möchte nun Kindklassen ableiten, die auch jeweils eine static const int maxHP haben, mit unterschiedlichen Werten für jede abgeleitete Klasse.</p>
<p>Nach vielem Foren durchsuchen weiß ich jetzt, dass das nicht so einfach geht und man könne &quot;Einheit&quot; mit virtual int getMaxHP() austatten und die Funktion in den abgeleitetet Klassen überschreiben. Allerdings müsste ich dann jede Kindklasse mit einer eigenen Variable und einer eigenen getMaxHP-Funktion austatten. Das klingt nicht sehr elegant, da es prinzipell immer die gleiche Funktion und die gleiche Variable ist. Geht das nicht irgendwie einfacher?</p>
<p>Danke!<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294284/static-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 15:43:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294284.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Oct 2011 16:45:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 16:45:46 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine Klasse &quot;Einheit&quot; mit static const int maxHP und möchte nun Kindklassen ableiten, die auch jeweils eine static const int maxHP haben, mit unterschiedlichen Werten für jede abgeleitete Klasse.</p>
<p>Nach vielem Foren durchsuchen weiß ich jetzt, dass das nicht so einfach geht und man könne &quot;Einheit&quot; mit virtual int getMaxHP() austatten und die Funktion in den abgeleitetet Klassen überschreiben. Allerdings müsste ich dann jede Kindklasse mit einer eigenen Variable und einer eigenen getMaxHP-Funktion austatten. Das klingt nicht sehr elegant, da es prinzipell immer die gleiche Funktion und die gleiche Variable ist. Geht das nicht irgendwie einfacher?</p>
<p>Danke!<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134124</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 16:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 17:00:28 GMT]]></title><description><![CDATA[<p>Ja, laß die Variable weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134135</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Oct 2011 17:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 17:31:18 GMT]]></title><description><![CDATA[<p>Da bietet sich doch virtual an. Und du brauchst die Variable auch nur 1x, und lässt sie vererben.</p>
<p>Hier mal ein kleines Bsp.:</p>
<pre><code class="language-cpp">class Einheit
{
    protected:
        const int max_hp;

    public:
        Einheit(int i) : max_hp(i) {}
        virtual int maxHp() // Das const kannst du dir bei primitiven Typen sparen, da sowieso r-value.
        {
            return max_hp;
        }
};

class Foo : public Einheit
{
    public:
        Foo(int i) : Einheit(i) {}
        virtual int maxHp()
        {
            return max_hp;
        }
};

int main()
{
    Einheit e(10);
    Foo f(50);

    Einheit* p = &amp;e;
    cout &lt;&lt; p-&gt;maxHp(); // max. HP ist 10.

    p=&amp;f;
    cout &lt;&lt; p-&gt;maxHp(); // max. HP ist 50.
}
</code></pre>
<p>edit: Wäre für deine Zwecke nicht sogar eine abstrakte Basisklasse sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134146</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 21 Oct 2011 17:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 17:31:32 GMT]]></title><description><![CDATA[<p>Ich verstand das so:</p>
<pre><code class="language-cpp">class Einheit
{
    public:
        virtual int maxHp() =0 ;
};

class Hoplit : public Einheit
{
    public:
        virtual int maxHp()
        {
            return 17;
        }
};

int main()
{
    Einheit e;//geht ja gar nicht
    Hoplit h;

    Einheit* p;
    p=&amp;h;
    cout &lt;&lt; p-&gt;maxHp(); // max. HP ist 17.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2134149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134149</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Oct 2011 17:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 17:46:37 GMT]]></title><description><![CDATA[<p>Ich habe es auch so verstanden wie volkard. Das würde sich auch mit virtuellen Funktionen schwierig gestalten, da Konstruktoren sich nun mal nicht polymorph verhalten.<br />
Daher klare Lösung: Virtuelle Basisklasse + MaxHp wird im Konstruktor der erbenden Klassen festgelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134154</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 21 Oct 2011 17:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:05:57 GMT]]></title><description><![CDATA[<p>@Gugelmoser: Danke für die Antwort, aber so hab ich das nicht gemeint. Ich möchte nicht im Konstruktor die maxHP festlegen, sondern sie static const haben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Ja, so sollte es funktionieren. Aber dann bräuchte halt jede Kindklasse diese Funktion oder? Da ich später viele solcher Werte habe, wäre es eben gut, wenn man einfach eine static Variable für jeder Kindklasse hätte. Aber das geht demnach nicht oder?<br />
edit: Zugegeben, viel Arbeit ist deine Methode nicht.^^</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>:</p>
<blockquote>
<p>MaxHp wird im Konstruktor der erbenden Klassen festgelegt.</p>
</blockquote>
<p>Dann würde jede einzelne Instanz einer Klasse den selben Wert speichern oder wie meinst du das?</p>
<p>Danke für die Antworten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134167</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:01:16 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>wie meinst du das?</p>
</blockquote>
<p>So:</p>
<pre><code class="language-cpp">class Einheit
{
  unsigned max_hp_;
public:
  Einheit(unsigned max_hp)
    : max_hp_(max_hp)
  {}
  virtual ~Einheit() = 0
  {}
};

class Hoplit : public Einheit
{
public:
  Hoplit()
    : Einheit(17)
  {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2134170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134170</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:12:04 GMT]]></title><description><![CDATA[<p>@cooky: Aber ich brauch doch nicht für jede Instanz die selbe Variable nochmal speichern!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134173</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:15:55 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>edit: Zugegeben, viel Arbeit ist deine Methode nicht.^^</p>
</blockquote>
<p><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/2134175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134175</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:15:55 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:16:45 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>@cooky: Aber ich brauch doch nicht für jede Instanz die selbe Variable nochmal speichern!?</p>
</blockquote>
<p>Du könntest das variabel machen:</p>
<pre><code class="language-cpp">//...

class Hoplit : public Einheit
{
public:
  Hoplit(unsigned init_hp)
    : Einheit(init_hp)
  {}
}; 

int main()
{
    Hoplit first(17)
    //...
}
</code></pre>
<p>Oder wie meinst du das mit &quot;nochmal&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134176</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:28:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder wie meinst du das mit &quot;nochmal&quot;?</p>
</blockquote>
<p>Ich brauch maxHP nicht variabel, ich brauche es static. Nicht jede Hoplitinstanz muss speichern was die max. HP sind. Das reicht einmal. Auch wenns natürlich funktioniert, wenn es jede Instanz speichert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134181</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:29:06 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>@cooky: Aber ich brauch doch nicht für jede Instanz die selbe Variable nochmal speichern!?</p>
</blockquote>
<p>Doch. Also nein, aber Speicher in dieser Größenordnung interessiert eh niemanden. Wenn du sicher bist, dass der Wert sich nicht ändert, kannste die Variable noch const machen.<br />
Die Alternative hat volkard ja schon gezeigt, aber das war doch quasi das, was du oben beschrieben hast.<br />
Allerdings scheint es mir im Kontext der Aufgabe sinnvoller, die Variable variabel zu halten. Stell dir nur mal vor, ein Hoblit wird gebufft/gedebufft. Dann könnte der Wert sich für ein einzelnes Objekt ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134183</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:34:23 GMT]]></title><description><![CDATA[<p>Das hätte ich dann mit einer eigenen Variable gemacht. Wenn der Hoplit debufft, dann muss er ja wieder wissen, was die &quot;Standard max hp&quot; für Hopliten sind.</p>
<p>Also Volkards Idee ist glaub ich echt das was ich brauch. Vielen Dank euch allen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134185</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:36:14 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>Das hätte ich dann mit einer eigenen Variable gemacht. Wenn der Hoplit debufft, dann muss er ja wieder wissen, was die &quot;Standard max hp&quot; für Hopliten sind.</p>
</blockquote>
<p>Das musst du eh der Buf Klasse entnehmen, stell dir nur mal zwei zeitlich überlappende Bufs vor. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134187</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:37:18 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Allerdings scheint es mir im Kontext der Aufgabe sinnvoller, die Variable variabel zu halten. Stell dir nur mal vor, ein Hoblit wird gebufft/gedebufft. Dann könnte der Wert sich für ein einzelnes Objekt ändern.</p>
</blockquote>
<p>Auch gefährlich. Durch den Buff bekommt er 100% dazu, macht aus 17 jetzt 34. Dann steigt er ein Level auf und bekommt 10 dazu, jetzt hat er 44. Buff verfliegt, er hat 22. Könnte sein, daß man sich damit in Teufels Küche bringt, und lieber immer</p>
<pre><code class="language-cpp">int Einheit::getMaxHp(){
   return hpModifier*getUnmodifiedMaxHp();
}
</code></pre>
<p>und<br />
getUnmodifiedMaxHp() ist die virtuelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134189</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Fri, 21 Oct 2011 19:40:58 GMT]]></title><description><![CDATA[<p>Ja eigentlich weiß ich gar nicht so genau was ich tue <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Wer weiß ob ich überhaupt je zu den Buffs komm... Mein ganzes Programm is eh ich nicht sehr professionell gestaltet (wie man vllt gemerkt hat^^).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2134192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134192</guid><dc:creator><![CDATA[Knobbers]]></dc:creator><pubDate>Fri, 21 Oct 2011 19:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to static und vererbung on Sat, 22 Oct 2011 05:37:01 GMT]]></title><description><![CDATA[<p>Knobbers schrieb:</p>
<blockquote>
<p>Ja eigentlich weiß ich gar nicht so genau was ich tue <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Wer weiß ob ich überhaupt je zu den Buffs komm... Mein ganzes Programm is eh ich nicht sehr professionell gestaltet (wie man vllt gemerkt hat^^).</p>
</blockquote>
<p>Dann fang vielleicht mit einem kleinen Problem (Kann auch ein kleines Teilproblem deines Spiels sein) an, und lerne daran und mit einer Handvoll guten Büchern, wie man sowas ordentlich(er) gestaltet. In den FAQ gibts ne Menge Buchvorschläge <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/2134255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2134255</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 22 Oct 2011 05:37:01 GMT</pubDate></item></channel></rss>