Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

1

10.07.2008, 13:24

[c++] Vererbung zur Laufzeit

Hallo,

ich habe folgendes Problem:

Ich habe eine Klasse

C-/C++-Quelltext

1
2
3
4
5
6
7
class Tier
{
public:
          void angriff();
private:
          int lebenspunkte;
};

Im Laufe des Programmes mutiert das Tier zum Supertier und erbt nun neue Paramter und funktionen einer Klasse "SuperTier"

C-/C++-Quelltext

1
2
3
4
5
6
7
class Supertier
{
public:
         void verteidigen();
private:
         int staerke;
};

Wie kann ich das jetzt realisiern, dass wenn eine bestimmte Bedingung erfüllt ist, die Klasse "Tier" von der Klasse "Supertier" erbt?

2

10.07.2008, 13:27

Du lässt die Klasse Supertier einfach allgemein von Tier erben, das ist ohnehin logisch und dann kannst du einfach wenn dein Tier mutiert, ein Supertier anlegen und mit dynamic_cast das Tier in das neu angelegte Supertier casten.
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

3

10.07.2008, 13:35

Zitat von »"Theprogrammer"«

Du lässt die Klasse Supertier einfach allgemein von Tier erben, das ist ohnehin logisch und dann kannst du einfach wenn dein Tier mutiert, ein Supertier anlegen und mit dynamic_cast das Tier in das neu angelegte Supertier casten.


Naja, aber wenn ich nicht nur eine Klasse habe, sondern um die 30....?
Dann müsste das "Tier" von allen 30 erben und das wäre doch ziemlich übertrieben (allein der Speicher, der dabei draufgeht...)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

10.07.2008, 13:40

Zitat von »"Stier X"«

Zitat von »"Theprogrammer"«

Du lässt die Klasse Supertier einfach allgemein von Tier erben, das ist ohnehin logisch und dann kannst du einfach wenn dein Tier mutiert, ein Supertier anlegen und mit dynamic_cast das Tier in das neu angelegte Supertier casten.


Naja, aber wenn ich nicht nur eine Klasse habe, sondern um die 30....?
Dann müsste das "Tier" von allen 30 erben und das wäre doch ziemlich übertrieben (allein der Speicher, der dabei draufgeht...)


Was für Klassen sind das denn?
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

5

10.07.2008, 14:09

Zitat von »"David_pb"«

Zitat von »"Stier X"«

Zitat von »"Theprogrammer"«

Du lässt die Klasse Supertier einfach allgemein von Tier erben, das ist ohnehin logisch und dann kannst du einfach wenn dein Tier mutiert, ein Supertier anlegen und mit dynamic_cast das Tier in das neu angelegte Supertier casten.


Naja, aber wenn ich nicht nur eine Klasse habe, sondern um die 30....?
Dann müsste das "Tier" von allen 30 erben und das wäre doch ziemlich übertrieben (allein der Speicher, der dabei draufgeht...)


Was für Klassen sind das denn?

Alle recht ähnlich. Es geht eben darum, dass unter bestimmten Bedingungen das Tier etwas erben kann, das verschachtelt sich dann immer noch.
z.B (auch wenn es jetzt ziemlich schwachsinnig ist (geht mir nur um das Prinziep)) "die Eierlegende Wollmilchsau":

Gehen wir davon aus, dass das Merkmal Sau nur unter der Voraussetzung Kuh ausgebildet werden kann und das Merkmal Huhn nur unter der Voraussetzung Schaf ausgebildet werden kann:
Ausgangsstatus : Platzhalter :lol:
Stufe 1: kann Merkmale ausbilden: Kuh || Schaf
Stufe 2: kann Merkmale ausbilden: (Stufe 1 == Kuh) Sau
(Stufe 1 == Schaf) Huhn
Bei der Stufe 2 wäre jeweils Sau oder Huhn überflüssig zu vererben.
In meinem Fall gibt es noch weitere Stufen und "Tierarten"^^.
Daher wäre es nicht sinnvoll alle zu vererben.

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

6

10.07.2008, 14:25

dann fächer es auf wie einen Baum (hab grad keinen UML-Modeller ... deswegen)


(Link)
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

7

10.07.2008, 14:32

Zitat von »"Ba'el"«

dann fächer es auf wie einen Baum (hab grad keinen UML-Modeller ... deswegen)


(Link)


Das versuch ich ja gerade. Aber dann wäre ich ja wieder bei allem vererben.
Es muss doch eine möglichkeit geben, im nachhinein Klassen zu vererben...

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

8

10.07.2008, 14:38

wie, nich' alles vererben?
alle Mutationen sind doch Tiere, also müssen auch alle Mutationen von Tier erben ... ichglaub du verstehst die Sache mit der Vererbung grad falsch, das Konstrukt was ich aufgezeichnet habe besagt nicht das alles in Tier gespeichert ist sondern genau das Gegenteil
new Tier() hat nur die Informationen von Tier
new Kuh() hat nur die Informationen von Tier und Kuh
aktuelle Projekte:
Ruby on Rails
XNA & Touchless
Progr. mobiler Endgeräte (GPS Trekking)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

10.07.2008, 14:40

Dynamisches Vererben geht nicht und macht auch gar keinen Sinn.
Versuchs doch mal mit Komposition.
Oder du erzeugst in dem Moment, wo das Spielobjekt sich verändert, einfach ein neues Objekt.

10

10.07.2008, 16:35

Strategy-Pattern könnte auch helfen.

Werbeanzeige