Frage zum Design
-
Hallo zusammen,
ich habe Folgendes:class AAA { public: int methodXXX(); //hier kommen alle anderen Funktionen der Klasse private: //hier kommen die ganzen Daten der Klasse }; class BBB { int methodYYY(); //hier kommen alle anderen Funktionen der Klasse private: //hier kommen die ganzen Daten der Klasse }; class CCC { int *GetPointer() {return (0);} //hier kommen alle anderen Funktionen der Klasse private: int *pointerToXYZ; int xyz; //hier kommen die ganzen Daten der Klasse };Die Klasse AAA und BBB benötigen beide den pointer aus der Klasse CCC.
Allerdings müssen beide auf die gleiche Ausführung von xyz zeigen.
Ausserdem kann ich im Moment noch nicht ausschließen das ich vielleicht eine Klasse DDD haben werde die doch eine andere Ausführng von xyz benötigt, xyz kann also nicht statisch sein.
Ist die einzigste möglichkeit ein globales Objekt oder gibt es eine elegantere Lösung.vielen dank fürs Durchlesen.
Gruß
-
In wie fern soll da ein globales Objekt helfen?
Also ich würde es ungefähr so machen:
void foo() { CCC c_object; AAA a_object; BBB b_object; c_object.givePointerTo(a_object); c_object.givePointerTo(b_object); }Eventuell ist es auch möglich, den Zeiger direkt bei der Initialisierung der Objekte zu übergeben. Je nach dem, zu welchen Zeitpunkt sie erstellt werden.
Gruß
Don06
-
ich dachte wenn ich ein globales Object von CCC habe kann ich darauf sowohl in AAA als auch in BBB zugreifen, wenn ich dann für DDD eine andere Instanz brauche dann könnte ich die Lokal erstellen.
Wo soll denn foo() definiert werden?
Wenn ich das richtig verstehe soll givePointerTo(...) dem argument einen zeiger
auf sich selbst übergeben.
Die Idée gefällt mir gut.
Was brauche ich alles für die Funktion?
Wie sieht die aus?
Muss ich die für jedes object überladen?
-
Ich denke mal, dass du hier Vererbung suchst.
-
vielleicht sollte ich mein konkretes Problem schildern, dann wird es vielleicht deutlicher.
Ich habe eine Klasse die sich um die Erstellung eines Fensters kümmert, eine andere die Direct3d einbindet und eine 3 die sich um die Textausgabe kümmert.
Die Direct3D Klasse hat einen Zeiger auf die Klasse die fast alle Direct3D funktionen beinhaltet und wird zum Beispiel in der TextKlasse gebraucht und auch in der Fensterklasse usw.. Jezt muss der zeiger aber in jeder anderen Klasse auf die gleiche instace zeigen da ich sonst merere d3dDevices habe.
Wenn ich es vererbe schleppe ich überall die Direct3d Klasse mit.Ich komme noch nicht ganz hinter das Konzept von Don6.
-
Dann übergib doch einfach einen Zeiger/Referenz auf die Klasse an jedes Objekt, dass darauf zugreifen muss.
int main () { ... Direct3D a; Font f ( &a ); Window w ( &a ); ... }
-
Tut mir leid aber ich bin noch ziehmlich unerfahren mit dem Umgang mit Klassen.
Das sollte aber helfen.
Das einzigste wo ich noch bedenken habe ist das alles zusammen in einer Funktion oder zumindest in einer Datei stehen muss (oder?).Ich könnte vielleicht das Direct3D object in der Headerdatei unter der Klassendifinition erstellen. Dann müsste ich nur die header einbinden.
Oder ist es falsch.
-
socco schrieb:
Tut mir leid aber ich bin noch ziehmlich unerfahren mit dem Umgang mit Klassen.
Das sollte aber helfen.
Das einzigste wo ich noch bedenken habe ist das alles zusammen in einer Funktion oder zumindest in einer Datei stehen muss (oder?).Ich könnte vielleicht das Direct3D object in der Headerdatei unter der Klassendifinition erstellen. Dann müsste ich nur die header einbinden.
Oder ist es falsch.Ich weiss jetzt nicht genau, was du meinst, aber du kannst das ganze ja hierarchisch arbeiten lassen. Sprich Am Anfang übergibst du nur 2 Zeiger, die dann den Zeiger wiederrum weitergeben usw. Damit du die Klasse benutzen kannst, musst du dann natürlich den Header einbinden. Den Overhead kannst du dann aber verringern, indem du das Body-Handle Idiom benutzt. (Spielt bei dir aber wahrscheinlich nicht so eine Rolle)
btw:
einzigste gibt es nicht.
-
Danke, ich denke ich habs jetzt.
Hab mal nach Body-Handle Idiom gegoogelt - noch ein weiter Weg bis dahin

-
socco schrieb:
Danke, ich denke ich habs jetzt.
Hab mal nach Body-Handle Idiom gegoogelt - noch ein weiter Weg bis dahin

Das ist halb so wild. Wenn du es mal verstanden hast, dann ists recht logisch.

Allerdings wirst du das noch nicht brauchen, da es unnötige Arbeit ist, wenn du die Schnittstelle sowieso oft ändern musst, was du als Anfänger definitiv tust.
