Basisklasse mit unbekannter Anzahl an abgeleiteten Klassen
-
-
Lustiger Name
-
Was du vor hast geht nicht, da du zu einem laufenden C++ nicht einfach so neue Klassen hinzufügen kannst
-
Wieso meinst du neue klassen zu brauchen? Beschreib mal was du machen willst, bin mir fast sicher dass wir ne andere Lösung finden.
-
-
mirrowwinger schrieb:
Situation: eine Basisklasse z.B. Auto
von dieser Basisklasse sollen Klassen abgeleitet werden, z.B. Opel, BMW, VW ...
für eine Betrachtung will der User (nicht Programmierer) eine Klasse hinzufügen, die der Programmierer nicht vorgegeben hat,um neue Klassen zur Laufzeit abzuleiten, brauchst du leider eine Sprache mit mehr Reflexionsvermögen als C++
- mit einer geeigneten Sprache ist so was ein Einzeiler.s := FillInTheBlankMorph request: 'Klassenname?'. Auto subclass: s asSymbol.
-
Also ich möchte eine Art Simulation schreiben (kein wirtschaftlicher Hintergrund sondern ein reines Vertraut machen mit unterschiedlichen Konzepten der OOP). Dieses kleine Projekt soll eine Umgebung beinhalten, welches aufgrund einer kleinen vom Userer erweiterbaren Datenbank am Anfang die Objekte einer Datenbank auswertet und entsprechend Objekte (welche in der Datenbank enthalten sind) erzeugt.
Es gibt also eine Basisklasse (belassen wir es mal bei der Anschauung von Autos) die Eigenschaften zur Verfügung stellt (z.B. Anzahl Türen, Anzahl Sitzplätze, Front-/ Heckantrieb, ...) Das Programm erstellt gemäß den Vorgaben der Datenbank am Anfang einmalig die entsprechende Anzahl an Objekten und weißt ihnen die individuellen Eigenschaften zu, damit die Simulation damit arbeiten kann. Eine Änderung der Objekte ist bis Ende des Programmes nicht nötig!MfG
mirrowwinger
-
mirrowwinger schrieb:
Also ich möchte eine Art Simulation schreiben (kein wirtschaftlicher Hintergrund sondern ein reines Vertraut machen mit unterschiedlichen Konzepten der OOP). Dieses kleine Projekt soll eine Umgebung beinhalten, welches aufgrund einer kleinen vom Userer erweiterbaren Datenbank am Anfang die Objekte einer Datenbank auswertet und entsprechend Objekte (welche in der Datenbank enthalten sind) erzeugt.
Es gibt also eine Basisklasse (belassen wir es mal bei der Anschauung von Autos) die Eigenschaften zur Verfügung stellt (z.B. Anzahl Türen, Anzahl Sitzplätze, Front-/ Heckantrieb, ...) Das Programm erstellt gemäß den Vorgaben der Datenbank am Anfang einmalig die entsprechende Anzahl an Objekten und weißt ihnen die individuellen Eigenschaften zu, damit die Simulation damit arbeiten kann. Eine Änderung der Objekte ist bis Ende des Programmes nicht nötig!War das jetzt die Antwort auf deine Frage? Hört sich so an.
-
@mirrowwinger:
OK. Und wo in all dem glaubst du dynamisch erstellte Klassen zu brauchen?
-
Hmm naja von dynamisch nur von unbekannter Anzahl (glaube ich) war keine Rede, nur ist die Vorgehensweise des Erstellens einer solchen unbekannten Anzahl noch ein wenig unklar für mich! (darauf zielte der Thread eigentlich hin)
Wie händle ich das mit den Klassen? Ist es z.B. besser diese in einer Liste zu erstellen oder dynamisches Array, ...? Welches Vorgehen bietet die beste PErformance oder welches ist ungeeignet oder gibt es prinzipiell dort ein spezifisches Vorgehen?mirrowwinger
-
Bei dir könnte es schon ein einfaches Array tun. Ansonsten http://de.wikipedia.org/wiki/Datenstruktur
-
mirrowwinger schrieb:
nur ist die Vorgehensweise des Erstellens einer solchen unbekannten Anzahl noch ein wenig unklar für mich! (darauf zielte der Thread eigentlich hin)
Wie händle ich das mit den Klassen?wie gesagt für so ein Vorhaben bist du mit C++ an der verkehrten Sprache.
... was nicht heißt, daß das generell nicht geht.
Es gibt dynamische Sprachen, mit denen es sehr einfach ist, beisp.weise eine Klassenhierarchie der Tiefe 100:
Object < Stage1 < Stage2 < ... < Stage100
zur Laufzeit zu erzeugenc := #Object. 1 to: 100 do: [ :n | s := ('Stage', n printString) asSymbol. (Smalltalk at: c) subclass: s. c := s ].
-
@mirrowwinger
Kann es sein dass du Klassen und Objekte verwechselst
-
Es ist völlig sinnfrei, verschiedene Automarken von einer Auto-Basisklasse abzuleiten. Die Marke ist ein Attribut eines Autos, aber sie ist kein Auto.
Lösung:string Car::getBrand()
void Car::setBrand(string brand)