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

1

03.06.2004, 14:35

Vererbung

Hi, ich bin wieder einmal auf ein triviales Problem gestosen und bin mir nicht sicher wie es richtig ist.

Stellen wir uns folgendes abstraktes Beispiel vor:

Wir haben eine Klasse cTop, diese hat Zugriff auf eine Klasse cBase, die als Basisklasse für verschiedene abgeleitete Klassen dient. Nehmen wir an wir haben eine abgeleitet Klasse cAbgeleitet1 und Klasse cAbgeleitet2.

Das wird ungefähr so aussehen:

cTop -----> cBase <|---------cAbgeleitet1 und cAbgeleitet2

Jetzt mein Problem:
Ich möchte in cTop ein Objekt erzeugen und nur anhand des Parameters soll entschieden werden, welche abgeleitete Klasse gemeint ist.
Damit man später weitere Klassen ableiten kann ohne den Code in cTop oder cBase zu ändern.

Meine Idee:
In cTop:
cBase *base = new cBase();
base->Create("Irgendwas").

Dabei ist Create in cBase festgelegt und damit ja an die anderen Klassen vererbt.

Meine Frage:
Wie kann ich jetzt festlegen, welche konkrete Klasse aufgerufen wird. Das heisst ich möchte praktisch nur an einem Parameter festlegen welche konkrete Klasse angesprochen wird.


Ich hoffe jemand versteht was ich meine und ich habe es einigermaßen deutlich erklärt.

so long

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

2

03.06.2004, 15:54

Da gibts afaik son extra pattern oder so für: Class-Factory

3

03.06.2004, 16:19

Ja ich weiss, im Prinzip will ich das auch verwenden.

Nur bin ich mir nicht sicher wie ich das implementiere.

Ich versuche mein Problem noch mal anders auszudrücken.

Ich möchte eine abstrakte Fabrik erzeugen, von der ich konkrete Fabriken ableiten kann. Jede konkrete Fabrik ist zuständig für ein Subsystem.
Wenn ich nun nachträglich ein neues Subsystem einführen will, dann möchte ich aber nicht die Fabrikklasse verändern, sonder ich möchte einfach eine neue konkrete Subklasse für mein Subsystem ableiten.

Das eigentliche Verständisproblem das ich habe ist, wie ist jetzt die Aufruffolge in cTop, damit ich auch hier keinen Code mehr ändern muss.
Praktisch sollte cTop ein Objekt der abstraken Fabrik erzeugen und dann anhand eines Parameters soll die abstrakte Fabrik entscheiden, welche konkrete Fabrik benutzt wird.

Aber eingentlich soll die abstrakte Fabrik nur die Basisfunktionaliät für die konkreten Fabriken bieten.
Ich denk das Stichwort Polymorphismus hilft hier weiter. Nur ich weiss echt nicht wie ich das machen kann.

Hoffe ich hab es jetzt nich noch unverständlicher gemacht, als es eh schon war!

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

4

03.06.2004, 19:16

Wenn du instanzen einer abgeleiteten klasse erstellen willst durch übergabe eines parameters (String), dann ist das relativ einfach:

du erstellst einfach eine funktion oder einen functor, der dir eine abgeleitete klasse erstellt und diese zurückgibt (über eine basis-klassen-pointer).

CBase* CreateInstance_Klassenname()
{
return new CAbgeleitet;
}

diese funktion bzw. functor regestrierst du dann beim laden der dll oder sonst irgendwie zusammen mit einem namen bei der classfactory.
die classfactory kann zB eine map sein mit Name,FuncPtr paaren.

Werbeanzeige