Designproblem mit Abhängigkeiten von Klassen
-
Hallo!
Folgendes Designproblem:
Ich habe eine Klasse X die mit einer anderen Klasse Y in einer Beziehung steht, genauer: Klasse X braucht von Klasse Y eine Variable damit bestimmte Methoden ausgeführt werden können.
Meine bisherige Lösung war das im Konstruktor von Klasse X ein Pointer auf eine Klasse Y übergeben werden musste, anders konnte man keine Instanz und kein Objekt einer Klasse X erzeugen, damit war garantiert das die Klasse X jederzeit lief.
Das Problem ist das Klasse X sehr oft eine Variable von anderen Klassen ist:class Foo { public: private: KlasseX x1,x2,x3; };
Jetzt ist natürlich kein Standardkonstruktor verfügbar und alles wird kompliziert zu handhaben.
Meine nachfolgende Idee war das in der Headerdatei zur Klasse X steht:
extern KlasseY *ptrKlasseY;und mit diesem Pointer wird dann im Standardkonstruktor gearbeitet -> Nachteile: Pointer kann umbenannt werden, dann müsste ich überall wieder ändern, ansonsten gibts für mich eigentlich keine (Durch Konstruktoren soll eine Klasse schließlich in einem definiertem Zustand sein).
Na ja irgendwie bin ich nicht happy, damit, wie würdet ihr das lösen?
-
Du kannst den Parameter doch durch die Initialisierungsliste von foo schleifen oder x ne methode verpassen die diesen Zieiger setzt und diesen in foo im konstruktor fordern ?!
-
Knuddlbaer schrieb:
Du kannst den Parameter doch durch die Initialisierungsliste von foo schleifen oder x ne methode verpassen die diesen Zieiger setzt und diesen in foo im konstruktor fordern ?!
Wenn ich dich richtig verstanden habe:
Ich wollte aber eine Klasse die direkt einsatzfähig ist, d.h. wenn Klasse Foo Instanzen von Klasse X bekommt will ich nicht erst jeder Instanz einen Pointer zuweisen müssen.
Aber meinen Weg finde ich nicht so toll
-
Aehm .... deine Klasse Y, wer instanziert die?
Ist fuer jede Instanz von X, Y das selbe objekt(Instanz) ?
Muesste ja eigentlich, sonnst musst du ueber den Ctor oder ner anderen funktion die Instanz von Y mitteilen, und das willst ja expliziet nich ....
Mit den oben genannten bedingungen koennte dir unter umstaenden eine statische private variable inbnerhalb der klasse X helfen, oder brauchst du zugriff auf Y auch von aussen ? wenn ja, kannst du es durch X durchschleifen, so dass du aenderungen an einem beliebigen X vornehmen kannst ....
evtl auf multihtreadsicherheit da achten ....
Ansonsten bleibt dir immer noch nen reines Singleton .... da hasst zugriff von ueberall iss aber immer das selbe ...
Ciao ...