Member Referenz oder Globales Objekt



  • Halloo

    Ich bin grade dabei, die Orientierung zu verlieren, vor lauter Objekten.
    Aber das ist nicht das (Haupt)Problem.
    Ich habe eine Hauptklasse "CApp", die quasi das Programm enthält.
    Nun hab ich noch eine ganze Menge Objekte, die aber alle die eine oder andere Member von der "CApp" brauchen. Nun übergeb ich die jeweils im Konstruktor als Referenz.

    public:
        CTeil( CApp& App ): my_App( App ) {...}
    private:
        CApp& my_App;
    

    Zugriff dann mit:

    int Var = my_App.Get_Var();
    

    Und das in allen Klassen (etwa 10).
    Ist das so gut, oder soll ich lieber die Variblen, die ich brauche, global halten, oder wie macht ihr das?

    Danke im vorraus



  • Also wenn du soviele Objekte mittlerweile hast kannst du dir natürlich auch schon ein Ableitungshirachi ausdenken



  • Nö, aber die Objekte haben untereinander doch nichts gemeinsam, oder wie meinst du das jetzt?



  • Wenn CApp nur einmalig im Programm vorkommt, kannst du auch einen Singleton definieren, so daß du dann nur eine globale Instanz von CApp hast.
    Dann brauchst du nicht immer CApp bei jedem Objekt zu übergeben.

    Zugriff dann über:

    CApp::Instance()->GetVar();
    

    oder aber du machst alle Variablen-Methoden der Klasse CApp statisch, z.B.

    class CApp
    {
    public:
      static int GetVar();
    }
    

    Wieder vorausgesetzt, daß es nur einen Wert für diese Variable gibt (ich nehme an, es handelt sich hierbei um Konfigurationsvariablen oder ähnliches, die bei Programmstart einmalig eingelesen werden?)



  • Th schrieb:

    Wenn CApp nur einmalig im Programm vorkommt, kannst du auch einen Singleton definieren, so daß du dann nur eine globale Instanz von CApp hast.
    Dann brauchst du nicht immer CApp bei jedem Objekt zu übergeben.

    Zugriff dann über:

    CApp::Instance()->GetVar();
    

    ...

    Hey das tönt gut, danke.
    Wie mach ich nen Singleton? Naja ich werd bestimmt was im Forum finden.

    Vielen Dank
    Bye

    PS:

    (ich nehme an, es handelt sich hierbei um Konfigurationsvariablen oder ähnliches, die bei Programmstart einmalig eingelesen werden?)
    

    Nun, es handelt sich um ein Objekt von einer API, und die will halt Window- und Instance-Handle und so Zeug wissen, aber schon öfter nicht nur am Start.



  • Obj-aktivist schrieb:

    Th schrieb:

    Wenn CApp nur einmalig im Programm vorkommt, kannst du auch einen Singleton definieren, so daß du dann nur eine globale Instanz von CApp hast.
    Dann brauchst du nicht immer CApp bei jedem Objekt zu übergeben.

    Zugriff dann über:

    CApp::Instance()->GetVar();
    

    ...

    Hey das tönt gut, danke.
    Wie mach ich nen Singleton? Naja ich werd bestimmt was im Forum finden.

    Google mal nach dem Begriff, das hilft immer 😉

    (Ansatzpunkt: Definiere die Ctor'en privat, dann kann nur die statische Methode Instance() ein Objekt anlegen)


Anmelden zum Antworten