<?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[Problem mit meiner Klassenhirarchie]]></title><description><![CDATA[<p>Also ich hab hier mal meine Klasse:<br />
classItems.h</p>
<pre><code class="language-cpp">#ifndef CLASSITEMS_H_INCLUDED
#define CLASSITEMS_H_INCLUDED

#include &lt;string&gt;

enum ItemTyp
{
    WAFFE,
    ZAUBERWAFFE,
    RUESTUNG,
    TRANK
};

class Item
{
    public:
        Item( ItemTyp typ, int verfuegbarkeit, std::string name );
        virtual ~Item();
        virtual ItemTyp getItemTyp() const { return itsTyp; }
        virtual int getVerfuegbarkeit() const { return itsVerfuegbarkeit; }
        virtual std::string getName() const { return itsName; }
        virtual int getSchaden() const = 0; // Hier schon deklariert, damit ich im Inventar allgemeint Items speichern kann, sonst fehlen die Funktionen da Zeiger auf Item
        virtual int getSchnelligkeit() const = 0;
        virtual int getRuestung() const = 0;
        virtual int getGesundheit() const = 0;
        virtual int getZauberfaehigkeit() const = 0;

    private:
        ItemTyp itsTyp;
        int itsVerfuegbarkeit;
        std::string itsName;
};

class WaffenItem : public Item
{
    public:
        WaffenItem( int verfuegbarkeit, int schaden, int schnelligkeit, std::string name );
        virtual ~WaffenItem();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }

    protected:
        int itsSchaden;
        int itsSchnelligkeit;
};

class Schwert : public WaffenItem
{
    public:
        Schwert( int verfuegbarkeit );
        virtual ~Schwert();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class Messer : public WaffenItem
{
    public:
        Messer( int verfuegbarkeit );
        virtual ~Messer();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class RuestungsItem : public Item
{
    public:
        RuestungsItem( int verfuegbarkeit, int ruestung, int schnelligkeit, std::string name );
        virtual ~RuestungsItem();
        virtual int getRuestung() const { return itsRuestung; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }

    protected:
        int itsRuestung;
        int itsSchnelligkeit;
};

class Kopfschutz : public RuestungsItem
{
    public:
        Kopfschutz( int verfuegbarkeit );
        virtual ~Kopfschutz();
        virtual int getRuestung() const { return itsRuestung; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class TrankItem : public Item
{
    public:
        TrankItem( int verfuegbarkeit, int gesundheit, std::string name );
        virtual ~TrankItem();
        virtual  int getGesundheit() const { return itsGesundheit; }

    protected:
        int itsGesundheit;
};

class HeilTrank20 : public TrankItem
{
    public:
        HeilTrank20( int verfuegbarkeit );
        virtual ~HeilTrank20();
        virtual int getGesundheit() const { return itsGesundheit; }
};

class ZauberItem : public Item
{
    public:
        ZauberItem( int verfuegbarkeit, int zauberfaehigkeit, std::string name );
        virtual ~ZauberItem();
        virtual int getZauberfaehigkeit() const { return itsZauberfaehigkeit; }

    protected:
        int itsZauberfaehigkeit;
};

class Zauberverstaerker3 : public ZauberItem
{
    public:
        Zauberverstaerker3( int verfuegbarkeit );
        virtual ~Zauberverstaerker3();
        virtual int getZauberfaehigkeit() const { return itsZauberfaehigkeit; }
};

#endif // CLASSITEMS_H_INCLUDED
</code></pre>
<p>classItems.cpp</p>
<pre><code class="language-cpp">#include &quot;classItems.h&quot;
#include &lt;string&gt;

using namespace std;

Item::Item( ItemTyp typ, int verfuegbarkeit, string name ):
    itsTyp( typ ), itsVerfuegbarkeit( verfuegbarkeit ), itsName( name )
{
}

Item::~Item()
{
}

WaffenItem::WaffenItem( int verfuegbarkeit, int schaden, int schnelligkeit, string name ):
    Item( WAFFE, verfuegbarkeit, name ), itsSchaden( schaden ), itsSchnelligkeit( schnelligkeit )
{
}

WaffenItem::~WaffenItem()
{
}

Schwert::Schwert( int verfuegbarkeit ):
    WaffenItem( verfuegbarkeit, 5, 2, &quot;Schwert&quot; )
{
}

Schwert::~Schwert()
{
}

Messer::Messer( int verfuegbarkeit ):
    WaffenItem( verfuegbarkeit, 3, 3, &quot;Messer&quot; )
{
}

Messer::~Messer()
{
}

RuestungsItem::RuestungsItem( int verfuegbarkeit, int ruestung, int schnelligkeit, string name ):
    Item( RUESTUNG, verfuegbarkeit, name ), itsRuestung( ruestung ), itsSchnelligkeit( schnelligkeit )
{
}

RuestungsItem::~RuestungsItem()
{
}

Kopfschutz::Kopfschutz( int verfuegbarkeit ):
    RuestungsItem( verfuegbarkeit, 3, 2, &quot;Kopfschutz&quot; )
{
}

Kopfschutz::~Kopfschutz()
{
}

TrankItem::TrankItem( int verfuegbarkeit, int gesundheit, string name ):
    Item( TRANK, verfuegbarkeit, name ), itsGesundheit( gesundheit )
{
}

TrankItem::~TrankItem()
{
}

HeilTrank20::HeilTrank20( int verfuegbarkeit ):
    TrankItem( verfuegbarkeit, 20, &quot;Heil-Trank-20&quot; )
{
}

HeilTrank20::~HeilTrank20()
{
}

ZauberItem::ZauberItem( int verfuegbarkeit, int zauberfaehigkeit, string name ):
    Item( ZAUBERWAFFE, verfuegbarkeit, name ), itsZauberfaehigkeit( zauberfaehigkeit )
{
}

ZauberItem::~ZauberItem()
{
}

Zauberverstaerker3::Zauberverstaerker3( int verfuegbarkeit ):
    ZauberItem( verfuegbarkeit, 3, &quot;Zauberverstaerker3&quot; )
{
}

Zauberverstaerker3::~Zauberverstaerker3()
{
}
</code></pre>
<p>Mein problem, wenn ich in meinem Programm ein Objekt erstellen will, zum Beispiel Kopfschutz, sagt er mir dass die Funktionen wie getSchaden und so nur abstract sind, aber ich hab sie ja für jede Klasse implementiert. Das komische ist, klasse Kopfschutz hat zum beispiel nur die Funktionen getRuestung und getSchnelligkeit, laut Fehlermeldung sagt er aber getSchaden und getGesundheit sind abstrakt, dabei werden diese funktionen gar nicht bei der klasse benötigt.<br />
bei klasse schwert, das gleiche.</p>
<p>Mach ich das = 0 weg, so dass sie nicht mehr abstrakt sind, bekomm ich beim linken für jede funktion den fehler undefined reference to get...</p>
<p>Hoffe ihr könnt mir helfen, weiß net mehr weiter=(</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262657/problem-mit-meiner-klassenhirarchie</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 12:09:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262657.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Mar 2010 14:13:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 14:13:18 GMT]]></title><description><![CDATA[<p>Also ich hab hier mal meine Klasse:<br />
classItems.h</p>
<pre><code class="language-cpp">#ifndef CLASSITEMS_H_INCLUDED
#define CLASSITEMS_H_INCLUDED

#include &lt;string&gt;

enum ItemTyp
{
    WAFFE,
    ZAUBERWAFFE,
    RUESTUNG,
    TRANK
};

class Item
{
    public:
        Item( ItemTyp typ, int verfuegbarkeit, std::string name );
        virtual ~Item();
        virtual ItemTyp getItemTyp() const { return itsTyp; }
        virtual int getVerfuegbarkeit() const { return itsVerfuegbarkeit; }
        virtual std::string getName() const { return itsName; }
        virtual int getSchaden() const = 0; // Hier schon deklariert, damit ich im Inventar allgemeint Items speichern kann, sonst fehlen die Funktionen da Zeiger auf Item
        virtual int getSchnelligkeit() const = 0;
        virtual int getRuestung() const = 0;
        virtual int getGesundheit() const = 0;
        virtual int getZauberfaehigkeit() const = 0;

    private:
        ItemTyp itsTyp;
        int itsVerfuegbarkeit;
        std::string itsName;
};

class WaffenItem : public Item
{
    public:
        WaffenItem( int verfuegbarkeit, int schaden, int schnelligkeit, std::string name );
        virtual ~WaffenItem();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }

    protected:
        int itsSchaden;
        int itsSchnelligkeit;
};

class Schwert : public WaffenItem
{
    public:
        Schwert( int verfuegbarkeit );
        virtual ~Schwert();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class Messer : public WaffenItem
{
    public:
        Messer( int verfuegbarkeit );
        virtual ~Messer();
        virtual int getSchaden() const { return itsSchaden; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class RuestungsItem : public Item
{
    public:
        RuestungsItem( int verfuegbarkeit, int ruestung, int schnelligkeit, std::string name );
        virtual ~RuestungsItem();
        virtual int getRuestung() const { return itsRuestung; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }

    protected:
        int itsRuestung;
        int itsSchnelligkeit;
};

class Kopfschutz : public RuestungsItem
{
    public:
        Kopfschutz( int verfuegbarkeit );
        virtual ~Kopfschutz();
        virtual int getRuestung() const { return itsRuestung; }
        virtual int getSchnelligkeit() const { return itsSchnelligkeit; }
};

class TrankItem : public Item
{
    public:
        TrankItem( int verfuegbarkeit, int gesundheit, std::string name );
        virtual ~TrankItem();
        virtual  int getGesundheit() const { return itsGesundheit; }

    protected:
        int itsGesundheit;
};

class HeilTrank20 : public TrankItem
{
    public:
        HeilTrank20( int verfuegbarkeit );
        virtual ~HeilTrank20();
        virtual int getGesundheit() const { return itsGesundheit; }
};

class ZauberItem : public Item
{
    public:
        ZauberItem( int verfuegbarkeit, int zauberfaehigkeit, std::string name );
        virtual ~ZauberItem();
        virtual int getZauberfaehigkeit() const { return itsZauberfaehigkeit; }

    protected:
        int itsZauberfaehigkeit;
};

class Zauberverstaerker3 : public ZauberItem
{
    public:
        Zauberverstaerker3( int verfuegbarkeit );
        virtual ~Zauberverstaerker3();
        virtual int getZauberfaehigkeit() const { return itsZauberfaehigkeit; }
};

#endif // CLASSITEMS_H_INCLUDED
</code></pre>
<p>classItems.cpp</p>
<pre><code class="language-cpp">#include &quot;classItems.h&quot;
#include &lt;string&gt;

using namespace std;

Item::Item( ItemTyp typ, int verfuegbarkeit, string name ):
    itsTyp( typ ), itsVerfuegbarkeit( verfuegbarkeit ), itsName( name )
{
}

Item::~Item()
{
}

WaffenItem::WaffenItem( int verfuegbarkeit, int schaden, int schnelligkeit, string name ):
    Item( WAFFE, verfuegbarkeit, name ), itsSchaden( schaden ), itsSchnelligkeit( schnelligkeit )
{
}

WaffenItem::~WaffenItem()
{
}

Schwert::Schwert( int verfuegbarkeit ):
    WaffenItem( verfuegbarkeit, 5, 2, &quot;Schwert&quot; )
{
}

Schwert::~Schwert()
{
}

Messer::Messer( int verfuegbarkeit ):
    WaffenItem( verfuegbarkeit, 3, 3, &quot;Messer&quot; )
{
}

Messer::~Messer()
{
}

RuestungsItem::RuestungsItem( int verfuegbarkeit, int ruestung, int schnelligkeit, string name ):
    Item( RUESTUNG, verfuegbarkeit, name ), itsRuestung( ruestung ), itsSchnelligkeit( schnelligkeit )
{
}

RuestungsItem::~RuestungsItem()
{
}

Kopfschutz::Kopfschutz( int verfuegbarkeit ):
    RuestungsItem( verfuegbarkeit, 3, 2, &quot;Kopfschutz&quot; )
{
}

Kopfschutz::~Kopfschutz()
{
}

TrankItem::TrankItem( int verfuegbarkeit, int gesundheit, string name ):
    Item( TRANK, verfuegbarkeit, name ), itsGesundheit( gesundheit )
{
}

TrankItem::~TrankItem()
{
}

HeilTrank20::HeilTrank20( int verfuegbarkeit ):
    TrankItem( verfuegbarkeit, 20, &quot;Heil-Trank-20&quot; )
{
}

HeilTrank20::~HeilTrank20()
{
}

ZauberItem::ZauberItem( int verfuegbarkeit, int zauberfaehigkeit, string name ):
    Item( ZAUBERWAFFE, verfuegbarkeit, name ), itsZauberfaehigkeit( zauberfaehigkeit )
{
}

ZauberItem::~ZauberItem()
{
}

Zauberverstaerker3::Zauberverstaerker3( int verfuegbarkeit ):
    ZauberItem( verfuegbarkeit, 3, &quot;Zauberverstaerker3&quot; )
{
}

Zauberverstaerker3::~Zauberverstaerker3()
{
}
</code></pre>
<p>Mein problem, wenn ich in meinem Programm ein Objekt erstellen will, zum Beispiel Kopfschutz, sagt er mir dass die Funktionen wie getSchaden und so nur abstract sind, aber ich hab sie ja für jede Klasse implementiert. Das komische ist, klasse Kopfschutz hat zum beispiel nur die Funktionen getRuestung und getSchnelligkeit, laut Fehlermeldung sagt er aber getSchaden und getGesundheit sind abstrakt, dabei werden diese funktionen gar nicht bei der klasse benötigt.<br />
bei klasse schwert, das gleiche.</p>
<p>Mach ich das = 0 weg, so dass sie nicht mehr abstrakt sind, bekomm ich beim linken für jede funktion den fehler undefined reference to get...</p>
<p>Hoffe ihr könnt mir helfen, weiß net mehr weiter=(</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866558</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Tue, 09 Mar 2010 14:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 14:23:31 GMT]]></title><description><![CDATA[<p>Den dicken Kommentar den du dir in der Definition von Item gesetzt hast solltest du nochmal genau anschauen und drüber nachdenken ob das der Sinn von Vererbung ist <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="😉"
    /><br />
Das Problem ist einfach, dass erbende Klassen alles implementiern müssen, was die Basisklasse als pure virtual deklariert hat. Machst du das &quot;=0&quot; weg, fehlt eine Implementierung in Item. Das mag der Linker nicht (insbesondere wegen &quot;virtual&quot;-Deklaration notwendig!).</p>
<p>Also:<br />
Klassenhierarchie passt schon so, nur nicht dass Item schon Informationen aller jemals abgeleiteten Klassen bietet.</p>
<p>Folgende Lösungen:</p>
<ol>
<li>Für jede Unterart von Items werden separate Listen geführt. Also eine für Waffen, eine für Kopfschutz, usw.</li>
<li>Du führst nur eine Liste, machst bei Zugriffen nen dynamic_cast auf die benötigte Klasse und verwendest deren spezielle Methoden</li>
</ol>
<p>In deinem Fall ist 1) absolut kein Problem und sollte verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866561</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Tue, 09 Mar 2010 14:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 14:28:12 GMT]]></title><description><![CDATA[<p>Du hast deine Frage doch schon beantwortet: Du hast rein abstrakte Funktionen, die du nicht implementierst. Das geht nicht. Denn was soll passieren, wenn jemand <code>Kopfschutz::getSchaden()</code> benutzen will? Laut deiner Vererbungshierarchie hat Kopfschutz diese Methoden, da Kopfschutz ein <code>Item</code> ist. Das du die Methode nicht benutzt, ist dabei egal.</p>
<p>Meine Analyse: Schlechtes Design. Wenn Kopfschutz keinen Schadenswert hat, dann braucht es auch keine Methode um auf diesen zuzugreifen. Wenn jedes item einen Schadenswert hat (und dieser bei Kopfschutz Null ist), dann musst du trotzdem die zugehörige Methode implementieren. Du könntest beispielsweise in <code>RuestungsItem</code> eine Methode getSchaden() definieren, die einfach immer 0 zurückgibt. So würde ich es machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866566</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 09 Mar 2010 14:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 15:11:08 GMT]]></title><description><![CDATA[<p>Hey ihr beiden,<br />
erst mal Danke für eure Hilfe.<br />
Jetzt ist es mir klar;-), da hab ich das mit dem virtual wohl net so ganz gecheckt;-)</p>
<p>Hab jetzt das abstrakte weggemacht und in der Basisklasse Item alle Funktionen mit return 0 implementiert.</p>
<p>Ich finde ich kann es so lassen, oder hast du ( SeppJ ) eine bessere Idee für ein Design:-P</p>
<p>Weil die Idee die ich hätte wird denk ich net funzen, wenn ich die Funktionen wie getSchaden dann nur in WaffenItem mache, dann meckert er ja wenn ich ein zeiger auf item mache und ein schwert erstellen will, dass Item keine Funktion hat die getSchaden heißt, meine ich hätte das schon ganz am Anfang so probiert:D</p>
<p>Gruß freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866586</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Tue, 09 Mar 2010 15:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 15:56:30 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Ich finde ich kann es so lassen, oder hast du ( SeppJ ) eine bessere Idee für ein Design:-P</p>
</blockquote>
<p>Ich sehe da zwei Designphilosophien, welche von beiden passt, kannst nur du entscheiden:</p>
<p>1. Jedes <code>Item</code> hat alle Eigenschaften. Dies ist ungefähr das was du jetzt hast. finde ich persönlich eher unpassend. Minimalbeispiel:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;sstream&gt;
#include&lt;vector&gt;
using namespace std;

class Item{
private:
  virtual int get_schutz()=0;
  virtual int get_schaden()=0;
  virtual string get_name()=0;
public:
  string eigenschaften()
  {
    stringstream temp;
    temp&lt;&lt;&quot;Dies ist ein &quot;&lt;&lt;get_name()&lt;&lt;&quot;. Ein &quot;&lt;&lt;get_name()&lt;&lt;&quot; bietet &quot;&lt;&lt;get_schutz()&lt;&lt;&quot; Schutz und macht &quot;&lt;&lt;get_schaden()&lt;&lt;&quot; Schaden.&quot;;
    return temp.str();
  }
};

class Waffe: public Item
{
  virtual int get_schutz()
  {
    return 0;
  }
};

class Schwert: public Waffe
{
  virtual int get_schaden()
  {
    return 10;
  }
  virtual string get_name()
  {
    return &quot;Schwert&quot;;
  }  
};

class Ruestung: public Item
{
  virtual int get_schaden()
  {
    return 0;
  }
};

class Kopfschutz: public Ruestung
{
  virtual int get_schutz()
  {
    return 5;
  }
  virtual string get_name()
  {
    return &quot;Kopfschutz&quot;;
  }  
};

int main()
{
  vector&lt;Item*&gt; items;
  items.push_back(new Schwert());
  items.push_back(new Kopfschutz());

  for (int i=0; i&lt;items.size();++i)
    cout&lt;&lt;&quot;Gegenstand &quot;&lt;&lt;i&lt;&lt;&quot;: &quot;&lt;&lt;items[i]-&gt;eigenschaften()&lt;&lt;endl;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Gegenstand 0: Dies ist ein Schwert. Ein Schwert bietet 0 Schutz und macht 10 Schaden.
Gegenstand 1: Dies ist ein Kopfschutz. Ein Kopfschutz bietet 5 Schutz und macht 0 Schaden.
</code></pre>
<p>2. Jedes Item hat wirklich nur die Eigenschaften, die es wirklich braucht. Diese Desingphilosophie halte ich für sauberer. Technisch gesehen macht ein Kopfschutz zwar 0 Schaden, aber wenn man alles aufzählt was ein Kopfschutz nicht macht, hat man eine unendlich lange Liste. Daher finde ich, dass eine Klasse nur Eigenschaften haben sollte, die diese auch tatsächlich auszeichnen.<br />
Beispiel:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;sstream&gt;
#include&lt;vector&gt;
using namespace std;

class Item{
protected:
  virtual string get_name()=0;
public:
  virtual string eigenschaften()=0;
};

class Waffe: public Item
{
  virtual int get_schaden()=0;
public:
  virtual string eigenschaften()
  {
    stringstream temp;
    temp&lt;&lt;&quot;Dies ist ein &quot;&lt;&lt;get_name()&lt;&lt;&quot;. Ein &quot;&lt;&lt;get_name()&lt;&lt;&quot; ist eine Waffe und macht &quot;&lt;&lt;get_schaden()&lt;&lt;&quot; Schaden.&quot;;
    return temp.str();
  }
};

class Schwert: public Waffe
{
  virtual int get_schaden()
  {
    return 10;
  }
  virtual string get_name()
  {
    return &quot;Schwert&quot;;
  }  
};

class Ruestung: public Item
{
  virtual int get_schutz()=0;
public:
  virtual string eigenschaften()
  {
    stringstream temp;
    temp&lt;&lt;&quot;Dies ist ein &quot;&lt;&lt;get_name()&lt;&lt;&quot;. Ein &quot;&lt;&lt;get_name()&lt;&lt;&quot; ist ein Ruestungsteil und bietet &quot;&lt;&lt;get_schutz()&lt;&lt;&quot; Schutz.&quot;;
    return temp.str();
  }
};

class Kopfschutz: public Ruestung
{
  virtual int get_schutz()
  {
    return 5;
  }
  virtual string get_name()
  {
    return &quot;Kopfschutz&quot;;
  }  
};

int main()
{
  vector&lt;Item*&gt; items;
  items.push_back(new Schwert());
  items.push_back(new Kopfschutz());

  for (int i=0; i&lt;items.size();++i)
    cout&lt;&lt;&quot;Gegenstand &quot;&lt;&lt;i&lt;&lt;&quot;: &quot;&lt;&lt;items[i]-&gt;eigenschaften()&lt;&lt;endl;
}
</code></pre>
<p>Ausgabe:<br />
[code][Gegenstand 0: Dies ist ein Schwert. Ein Schwert ist eine Waffe und macht 10 Schaden.<br />
Gegenstand 1: Dies ist ein Kopfschutz. Ein Kopfschutz ist ein Ruestungsteil und bietet 5 Schutz.<br />
/code]</p>
<p>P.S.: Ja, ich weiß, dass meine Beispiele Speicherlöcher erzeugen und dass Klassen mit nur statischen Eigenschaften ziemlich witzlos sind. Aber ich bin mir sicher, dass der Threadersteller dies erkennen und verbessern kann. Soll ja nur ein Beispiel sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866598</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 09 Mar 2010 15:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Klassenhirarchie on Tue, 09 Mar 2010 17:48:05 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine ausführliche Antwort und vor allem für deien Mühe=)</p>
<p>Ja ich denke aber auch dass ich wohl eher zu Version 2 tendiere=)<br />
Lasse mir es nochmal durch den Kopf gehen.</p>
<p>Auf jeden Fall vieelen Dank=)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866643</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Tue, 09 Mar 2010 17:48:05 GMT</pubDate></item></channel></rss>