<?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[oo-frage: waffe&amp;lt;-&amp;gt;spieler]]></title><description><![CDATA[<pre><code class="language-cpp">class weapon
{
};

class character
{
};
</code></pre>
<p>Der Character soll jetzt die Waffe &quot;anlegen&quot; können und benutzen können.</p>
<p>Fragen:<br />
- Speichert der Character ein Zeiger auf seine Waffe oder die Waffe einen Zeiger auf seinen Träger? Oder beides? Wenn beide Zeiger aufeinander speichern kommt man als benutzer ziemlich stark durcheinander.<br />
- Bei einem guten Design müsste es nicht nötig sein, dass beide Zeiger aufeinander tragen, oder? Wie sehr ihr das?<br />
- ein Null-Pointer bedeutet keine Waffe angelegt - oder lieber doch ein zusätz. boolean dafür nehmen?<br />
- Nehmen wir an ein Schwer gibt dem Character zusätzlich +4 Stärke, wie wird das am sichersten implementiert? (vielleicht sogar ein Object, bei dessen Konstruktion der Bonus addiert, und bei dessen Destruktor der Bonus wieder subtrahiert wird? So eine art weapon_character_connection-Klasse.)</p>
<p>Ich bin über _jede_ ernsthafte Idee bzw. Vorschlag dankbar <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>
<p>Danke, fraggi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197007/oo-frage-waffe-lt-gt-spieler</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:59:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197007.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Nov 2007 15:56:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to oo-frage: waffe&amp;lt;-&amp;gt;spieler on Mon, 05 Nov 2007 15:56:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class weapon
{
};

class character
{
};
</code></pre>
<p>Der Character soll jetzt die Waffe &quot;anlegen&quot; können und benutzen können.</p>
<p>Fragen:<br />
- Speichert der Character ein Zeiger auf seine Waffe oder die Waffe einen Zeiger auf seinen Träger? Oder beides? Wenn beide Zeiger aufeinander speichern kommt man als benutzer ziemlich stark durcheinander.<br />
- Bei einem guten Design müsste es nicht nötig sein, dass beide Zeiger aufeinander tragen, oder? Wie sehr ihr das?<br />
- ein Null-Pointer bedeutet keine Waffe angelegt - oder lieber doch ein zusätz. boolean dafür nehmen?<br />
- Nehmen wir an ein Schwer gibt dem Character zusätzlich +4 Stärke, wie wird das am sichersten implementiert? (vielleicht sogar ein Object, bei dessen Konstruktion der Bonus addiert, und bei dessen Destruktor der Bonus wieder subtrahiert wird? So eine art weapon_character_connection-Klasse.)</p>
<p>Ich bin über _jede_ ernsthafte Idee bzw. Vorschlag dankbar <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>
<p>Danke, fraggi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398147</guid><dc:creator><![CDATA[fraggi]]></dc:creator><pubDate>Mon, 05 Nov 2007 15:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to oo-frage: waffe&amp;lt;-&amp;gt;spieler on Mon, 05 Nov 2007 16:17:53 GMT]]></title><description><![CDATA[<p>Naja, der Spieler _benutzt_ doch die Waffe. Also legst du sie als verschachtelte Klasse innerhalb der Charakter-Klasse an. Stichwort &quot;Delegation&quot; <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/1398162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398162</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to oo-frage: waffe&amp;lt;-&amp;gt;spieler on Mon, 05 Nov 2007 16:27:59 GMT]]></title><description><![CDATA[<p>nun, es gibt auch waffen, die sich ihren träger suchen</p>
<p>excalibur zB</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398170</guid><dc:creator><![CDATA[crashterpiece]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to oo-frage: waffe&amp;lt;-&amp;gt;spieler on Mon, 05 Nov 2007 16:39:16 GMT]]></title><description><![CDATA[<p>Ich würds so lösen:</p>
<pre><code class="language-cpp">class IItemModifierStrength
{ 
   virtual void setStrengthMod(bonus) = 0;
   virtual void getStrengthMod() = 0;
};

class ICanCarryWeapon
{
   virtual void attachWeapon() = 0;
   virtual void detachWeapon() = 0;  
};

// danke für die vorlage crashterpiece  btw :P
class Excalibur : public IItemModifierStrength
{
   // pure virtual Methode muss implementiert werden
   void setStrengthMod(){}
   void getStrengthMod(){return foobar;}
};

class Player : public ICanCarryWeapon
{
   void attachWeapon(){}
   void detachWeapon(){} 
};
</code></pre>
<p>Das Interface IItemModifierStrength übernimmt eben halt die Höhe des Attributs.<br />
Und wenn du eben die Attribute prüfst, kannst du dich auch explizit auf dieses Interface beschränken.<br />
Das Interface ICanCarryWeapon sorgt jetzt dafür, dass beim an- und ablegen die Werte richtig modifiziert werden.<br />
Wäre ne Lösung, es gibt sicher noch andere.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398173</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to oo-frage: waffe&amp;lt;-&amp;gt;spieler on Mon, 05 Nov 2007 16:39:39 GMT]]></title><description><![CDATA[<p>Hallo Fraggi,</p>
<p>es ist grundsätzlich zu vermeiden, dass sich zwei Klassen gegenseitig kennen - also Zeiger auf Objekte der jeweils anderen Klassen tragen.<br />
In welche Richtung die Beziehung implementiert wird, hängt ausschließlich davon ab, wozu die Beziehung benutzt wird. In diesem Fall würde ich vermuten, dass 'character hat weapon' die bessere Alternative ist.<br />
Für die Realisierung gibt es einen ganzen Sack Möglichkeiten.<br />
1.) einfacher Zeiger</p>
<pre><code class="language-cpp">class weapon {};
class character
{
    weapon* m_weapon;
};
</code></pre>
<p>Nachteil: Du musst Dich im Copy-Konstruktor, Assignment-Operator und Destruktor um diesen Zeiger 'kümmern'.</p>
<p>2.) Smart-Pointer</p>
<pre><code class="language-cpp">class character
{
    std::auto_ptr&lt; weapon &gt; m_weapon;
};
</code></pre>
<p>Damit entfällt das 'kümmmern' aber der Character ist nicht mehr kopierbar - eventuell willst Du das sogar, weil er so eine 'feste Identität' bekommt - d.h. Zeiger auf ihn bleiben gültig solange er nicht gelöscht wird.</p>
<p>3.) Mehrer weapon</p>
<pre><code class="language-cpp">class character
{
    std::vector&lt; weapon &gt; m_weapons;
};
</code></pre>
<p>So kann der Character mehr als eine Waffe tragen. Und wenn der Container leer ist (Methode empty()) so hat er keine.<br />
Jede weapon kann so eine Methode Stärke besitzen und diese können in einer Methode getStaerke des characters alle summiert werden.</p>
<p>Die Lösung mit dem boolean würde ich nicht machen, wenn überhaupt dann nur als Attribut von weapon - also es gibt dann eine Waffe von der Art 'keine Waffe'.</p>
<p>Das mit der 'weapon_character_connection-Klasse' musst Du nochmal ausführlicher erklären, wie Du das meinst.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398174</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:39:39 GMT</pubDate></item></channel></rss>