<?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[Objekte vergleichen]]></title><description><![CDATA[<p>Zurzeit versuche ich mich an einem Programm (soll ziemlich umfassend werden), das zum schnelleren Ablauf eines DSA kampfes führen soll. Da DSA (das schwarze Auge) ein sehr erweiterbares Pen and Paper Rollenspiel ist möchte ich auch mein Programm möglichst erweiterbar gestalten.</p>
<p>Nun bin ich an dem Teil dass ich eine Klasse für Ruestungen machen will. Eine Rüstung hat in DSA nur einen RS (Rüstungswert) einen BE (Behinderungswert) und eine Zone an welcher diese Rüstung befestigt ist. Laut den DSA Basisregeln gibt es optional wer den Kampf wirklich ausreizen und möglichst realistisch gestalten will die Regel mit den Trefferzonen. Es sind dort folgende Trefferzonen beschrieben für einen Menschen: Kopf, Brust, Arm, Fuß, Bauch. So für den Anfang genügt mir das aber ich möchte später vielleicht noch die Trefferzone Hand oder Schulter dazu.</p>
<p>Programmiertechnisch hab ich mir zuerst gedacht mit einem enum. Jedoch ist dieser Typ nicht wirklich erweiterbar. Deshalb hab ich mir gedacht mit Klassen, nämlich dass alle Zonen (Arm, Bauch, usw.) von der Klasse Zone erben und ich somit wenn die Rüstung aus mehreren Teilen besteht einen vector aus verschiedenen Zonen erstellen kann (Arm, Bauch, usw. die von Zone erben)</p>
<p>Pseudocode dazu:</p>
<pre><code class="language-cpp">class Zone
{
};

class Arm : public Zone
{

};

class Kopf : public Zone
{

};

class Ruestung
{
     private:
          vector &lt;Zone *&gt; *zonen;

     public:
        Ruestung()
        {
        }

usw.
}
</code></pre>
<p>Nun möchte ich aber weiters vergleichen ob ich wenn ich dem Gegner auf den Helm haue er auch wirklich einen Helm hat.</p>
<p>Das heißt der Gegner hat ein Attribut Ruestung und ich möchte mit einer for Schleife erörtern ob die Zone Kopf überhaupt bei seiner Ruestung inkludiert ist oder ob ich ihm nicht seinen Kopf spalte <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="🤡"
    /></p>
<p>Kann ich irgendwie Objekte vergleichen ob sie der gleiche Typ sind. z.B.: ob in dem vector zonen von der Rüstung der Arm geschützt ist.</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; zonen-&gt;size(); i++)
{
    if(zonen-&gt;at(i) == Kopf //wie vergleichen, == geht nicht, oder geht das überhaupt
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/246916/objekte-vergleichen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 19:22:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246916.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Aug 2009 14:45:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte vergleichen on Mon, 03 Aug 2009 14:45:40 GMT]]></title><description><![CDATA[<p>Zurzeit versuche ich mich an einem Programm (soll ziemlich umfassend werden), das zum schnelleren Ablauf eines DSA kampfes führen soll. Da DSA (das schwarze Auge) ein sehr erweiterbares Pen and Paper Rollenspiel ist möchte ich auch mein Programm möglichst erweiterbar gestalten.</p>
<p>Nun bin ich an dem Teil dass ich eine Klasse für Ruestungen machen will. Eine Rüstung hat in DSA nur einen RS (Rüstungswert) einen BE (Behinderungswert) und eine Zone an welcher diese Rüstung befestigt ist. Laut den DSA Basisregeln gibt es optional wer den Kampf wirklich ausreizen und möglichst realistisch gestalten will die Regel mit den Trefferzonen. Es sind dort folgende Trefferzonen beschrieben für einen Menschen: Kopf, Brust, Arm, Fuß, Bauch. So für den Anfang genügt mir das aber ich möchte später vielleicht noch die Trefferzone Hand oder Schulter dazu.</p>
<p>Programmiertechnisch hab ich mir zuerst gedacht mit einem enum. Jedoch ist dieser Typ nicht wirklich erweiterbar. Deshalb hab ich mir gedacht mit Klassen, nämlich dass alle Zonen (Arm, Bauch, usw.) von der Klasse Zone erben und ich somit wenn die Rüstung aus mehreren Teilen besteht einen vector aus verschiedenen Zonen erstellen kann (Arm, Bauch, usw. die von Zone erben)</p>
<p>Pseudocode dazu:</p>
<pre><code class="language-cpp">class Zone
{
};

class Arm : public Zone
{

};

class Kopf : public Zone
{

};

class Ruestung
{
     private:
          vector &lt;Zone *&gt; *zonen;

     public:
        Ruestung()
        {
        }

usw.
}
</code></pre>
<p>Nun möchte ich aber weiters vergleichen ob ich wenn ich dem Gegner auf den Helm haue er auch wirklich einen Helm hat.</p>
<p>Das heißt der Gegner hat ein Attribut Ruestung und ich möchte mit einer for Schleife erörtern ob die Zone Kopf überhaupt bei seiner Ruestung inkludiert ist oder ob ich ihm nicht seinen Kopf spalte <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="🤡"
    /></p>
<p>Kann ich irgendwie Objekte vergleichen ob sie der gleiche Typ sind. z.B.: ob in dem vector zonen von der Rüstung der Arm geschützt ist.</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; zonen-&gt;size(); i++)
{
    if(zonen-&gt;at(i) == Kopf //wie vergleichen, == geht nicht, oder geht das überhaupt
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1754610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754610</guid><dc:creator><![CDATA[reuabreliz]]></dc:creator><pubDate>Mon, 03 Aug 2009 14:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Mon, 03 Aug 2009 14:55:54 GMT]]></title><description><![CDATA[<p>Ja, mit typeid. Aber meistens ist das kein gutes Design...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754614</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Mon, 03 Aug 2009 14:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Mon, 03 Aug 2009 14:58:24 GMT]]></title><description><![CDATA[<p>Kopf, Arm und Bauch haben aber keine Methoden mit unterschiedlichem Code, also ist das Aufbrechen in unterschiedliche Klassen übertrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754616</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 03 Aug 2009 14:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Mon, 03 Aug 2009 14:58:50 GMT]]></title><description><![CDATA[<p>asdasdasd schrieb:</p>
<blockquote>
<p>Ja, mit typeid. Aber meistens ist das kein gutes Design...</p>
</blockquote>
<p>Damit das etwas konstruktiver ist:</p>
<p>Wenn du es dir einfacher machen willst, dann mach es so:</p>
<pre><code class="language-cpp">class Zone
{
 virtual void hit() = 0;
};

class Kopf : public Zone
{
 virtual void hit()
 {
  std::cout &lt;&lt; &quot;AUA!\n&quot;;
 }
};

class GibtsNet : public Zone
{
 virtual void hit() { } // Nichts, gibts nicht!
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1754617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754617</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Mon, 03 Aug 2009 14:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Tue, 04 Aug 2009 09:00:53 GMT]]></title><description><![CDATA[<p>asdasdasd schrieb:</p>
<blockquote>
<p>Ja, mit typeid. Aber meistens ist das kein gutes Design...</p>
</blockquote>
<p>Warum ist das so schlecht? Bringt das manchmal Probleme mit sich?</p>
<p>asdasdasd schrieb:</p>
<blockquote>
<p>Damit das etwas konstruktiver ist:</p>
<p>Wenn du es dir einfacher machen willst, dann mach es so:</p>
<pre><code class="language-cpp">class Zone
{
 virtual void hit() = 0;
};

class Kopf : public Zone
{
 virtual void hit()
 {
  std::cout &lt;&lt; &quot;AUA!\n&quot;;
 }
};

class GibtsNet : public Zone
{
 virtual void hit() { } // Nichts, gibts nicht!
};
</code></pre>
</blockquote>
<p>Das sieht mir nach einer halbwegs passablen Lösung aus. <strong>Danke</strong> <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="🙂"
    /> Aber bin noch immer auf neue Vorschläge gespannt. Außer das Arsenal ist erschöpft, dann kann der Thread geschlossen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754973</guid><dc:creator><![CDATA[reuabreliza]]></dc:creator><pubDate>Tue, 04 Aug 2009 09:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Tue, 04 Aug 2009 09:08:36 GMT]]></title><description><![CDATA[<p>reuabreliza schrieb:</p>
<blockquote>
<p>asdasdasd schrieb:</p>
<blockquote>
<p>Ja, mit typeid. Aber meistens ist das kein gutes Design...</p>
</blockquote>
<p>Warum ist das so schlecht? Bringt das manchmal Probleme mit sich?</p>
</blockquote>
<p>Solch ein Design ist nur schwer und mühselig erweiterbar. Stell dir vor, du willst neue Subklassen hinzufügen. Nun mußt du alle Stellen im Code ändern, die per TypeId eine Aktion / Signal für die neue Subklasse auslösen müssen, ändern. So etwas ist sehr fehleranfällig und im OOP auch unnötig.</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754975</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Tue, 04 Aug 2009 09:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Tue, 04 Aug 2009 14:13:12 GMT]]></title><description><![CDATA[<p>Hier dürfte enum angebracht sein.</p>
<blockquote>
<p>Jedoch ist dieser Typ nicht wirklich erweiterbar</p>
</blockquote>
<p>Wie kommst du darauf?</p>
<pre><code class="language-cpp">enum Zone {Arm,Kopf,...};
class Ruestung
{
   private:
     vector&lt;Zone&gt; zonen; 
[...]

for(int i = 0; i &lt; zonen.size(); i++)
{
    if (zonen.at(i) == Kopf)...;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1755130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755130</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Tue, 04 Aug 2009 14:13:12 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte vergleichen on Tue, 04 Aug 2009 21:33:41 GMT]]></title><description><![CDATA[<p>Das ist mir klar. Ich hätte die erweiterung eher so gemeint. Fuß, Hand, Auge, Herz, Nase usw. , aber trotzdem danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755408</guid><dc:creator><![CDATA[reuabreliza]]></dc:creator><pubDate>Tue, 04 Aug 2009 21:33:41 GMT</pubDate></item></channel></rss>