Mehrere Klassen zusammenfassen?
-
Hallo zusammen,
ich hab ein kleines Problem: Ich habe mehrere Klassen geschrieben (im Grund eine realisation von verschiedenen SI Einheiten... Gramm, Meter etc pp ) Nun möchte ich, dass diese Klassen in aneren Projekten wiederverwendet werden. Allerdings find ich es ein bischen mühsam immer alle Dateien (jede Einheit ist eine eigene Klasse) einzeln zu includieren.
Gibt es irgendwie eine Möglichkeit die Dateien so zusammenzufassen, dass ich nur noch eine einzige Datei includieren muss?? zb
#include "Einheiten.h" oder so??
Was muss dazu in diese Datei rein?? Ich hab auch ein bischen mit den Packages gespielt, die man da erstellen kann aber bisher bin ich nicht auf einen grünen Zweig gekommen (zb fehlt wenn ich das Package compiliert habe immer die .h Datei... und ich frag mich wie ich dass dann includieren soll(installiert ist es laut Builder aber richtig...)
Lieg ich also mit dem Weg über Packages richtig oder geht das noch irgendwie anders // einfacher??
bye
meeee
-
Hallo,
Du könntest eine Headerdatei erzeugen, in der nur die erforderlichen anderen headerdateien inkludiert werden. Wenn es nicht zu viele Klassen sin könnte man sie auch alle zusammen in einer Headerdatei deklarieren.
Wobei ich mich frage, warum du für jede Einheit eine eigene Klasse hast. Das sieht mir nach einem Designfehler aus. Normalerweise hat man einen Einheitenmanager der alle Einheiten managed.Ciao
-
Hi,
erstmal danke für die superschnelle Antwort!!
Nun das mit den eigenen Klassen hab ich deshalb gemacht, da ma ja sehr viele Sachen vererben kann und dann auch innerhalb der Klasse manche Sachen extra neu ausprogrammieren/überschreiben kann.
Ist der Einheitenmanager schon in Borland integriert und ich hab das noch nie gesehen oder sind das externe Programme??
Danke nochmal!!
bye
meeee
-
Sowas muß man schon selber schreiben.
Ich verwende sowas auch in meinen Programmen.
Du solltest das mit der Vererbung auch nicht übertreiben. Vererbung drückt immer eine ist ein-Beziehung aus. Wenn du nicht sagen kannst "Diese Klasse ist auch die andere Klasse" ist Vererbung fehl am Platz. Hier ist Layering ("enthält ein") die bessere Variante.
Lies dazu am besten mal "Effektiv C++ programmieren" von Scott Meyers.Ein Einheitenmanager verwaltet eine Liste von Einheiten und kann die Beziehungen (Umrechnungen) abbilden. Er müsste dem Programm auch global zur verfügung gestellt werden damit man diese Liste nich mehrfach herumschleppt. Die Einheit selbst kann eine einfache Zahle sein.
Dann könnte man sowas wie eine Parameterklasse, bestehend aus Zahl und Einheit erstellen.
-
Hi,
also oky dann ist dass ja im Prinzip so ähnlich wie das was ich vorhabe. Ich bin gerade dabei ein Programm zur Auslegung von Getrieben bzw erstmal nur Wellen zu schreiben. Dazu brauch ich dann halt diese Einheiten als Grundlage.
Ich hab dazu eine Übergeordnete Klasse "Einheit" erstellt, die verschiedene Sachen zum doubles für die Aufnahme des Wertes, eine toString methode etc zu verfügung stellt.
Jede Einheit(also zb Newton) erbt jetzt von Einheit (ich denke das ist ja auch ok, da man sagen kann z.B. ein Newton ist eine Einheit...) und hat selbst noch einen konstruktor der eben die Werte belegt(plus etwaige besonderheiten).
Ich hab das von dir oben mit dem schreiben in eine Headerdatei mal probiert, bis jetzt gehts noch nicht und ich bekomm komische Fehlermeldungen, aber das liegt wohl im moment an "zirkel-includes" Ich geh jetzt nochmal alle Klassen durch und pase das an
bis später
bye
meeee
-
hmmm also irgendwie funktioniert as noch nicht so richtig...
Gibts irgendwo ein Tut wo man den richtigen Umgang, vor allem das spätere wiederverwenden lernt?? Mein stand ist bisher folgender:
Ich hab einige .cpp und .h Dateien die ich zu einem Packet zusammenfassen will. Ich hab es geschafft ein Packet zu erzeugen und dieses auch zu installieren. (Zumindest erscheint es unter den Packages die sich im Builder anzeigen lassen kann) Im Verzeichnis liegt dann eine .cpp und eine .bpk.
Meine Frage dazu jetzt: Wie bekomm ich in einem anderen Projekt die Dateien geladen?? Weil ein einfacher include funkt ja irgendwie damit nicht, da ich ja keine .h Datei hab.
Danke schonmal für eure Mühen
thx
meeee
-
Eine bpk ist eine Komponentenbibliothek. Die würde man über Komponente/Komponente installieren in ein Projekt einfügen.
Wenn deine Klassen nur bei euch verwendet werden, reicht es doch, einfach eine Bibliothek (lib) zu erzeugen. Die Headerdateien mußt du natürlich dann trotzdem mitgeben. Immerhin brauchen die Nutzer auch die Deklarationen.
-
ah jetzt hats geschnackelt... Das was ich im Kopf hatte wird nicht über Packages realisiert sondern über Bibliotheken
Jetzt hab ich das mit einer "inhalts.h" und einer Liberary kombiniert und es funkioniert!
DANKE Braunstein :-))
bye
meeee