andere klassen sollen objekt aus einer klasse nutzen



  • Hallo Leute!

    Also ich hab eine Basisklasse welche zugriff aufs OS oder Dateien bietet.
    Neben dieser hab ich mehrere Klassen die aber ein Objekt aus der Basisklasse
    nutzen müssen. Wie könnte ich das am besten machen, dass diese auf die Basisklasse zugreifenkönnen ohne dass ich eine globale Variable nutzen muss.
    Singleton?

    sieht so aus->

    class root {
    public:
          //klasse aus ner api
          filesystem *fs;
    };
    
    class logger {
    private:
    //auch aus api
         writefile *rf;
    public:
     void init() {
            // und jetzt muss ich auf das objekt in root zugreifen
           //vllt so?
           rf = root::fs->create("test.txt");
           //per globale variable, zeiger auf das in int main erstellte root objekt
           rf = mroot->fs->create("test.txt");
        };
    };
    


  • Mal abgesehen davon, daß ich hier nirgendwo eine Basisklasse sehe, stimmt deine Schlußfolgerung. Ein Singleton ist in diesem Fall die geeignete Methode. So wie du es geschrieben hast geht es natürlich nicht (die Klasse root muß das Singleton-Pattern implementieren). Aber da du ja nun schon das Stichwort hast, wirst du sicher auch herausfinden können wie das geht (Google ist dein Freund).

    Anzumerken wäre noch, daß in root

    filesystem *fs;
    

    private sein sollte (Datenkapselung). Und die init-Funktion von logger klingt verdächtig. Eigentlich nimmst man für diese Aufgabe den Konstruktor her.



  • ja zwecks ctor, dann muss ich aber bei jeder definition von logger
    den root pointer mit reinschreiben, was wenn man die geschichte weiter ausdehnt viel schreibarbeit ist. desweiteren wirds auch unübersichtlich.
    ich will dass die anderen klassen auf elemente dieser root klasse zugreifen können...



  • Mach aus root ein Singleton, wie gesagt. Das mit dem init und dem Konstruktor ist ein völlig anderes Thema.



  • Ok, danke für Info.
    Eine Frage noch, ist es auch möglich es anders als Singleton anzugehen?.
    Beim Singleton wird doch die Klasse immer neu erstellt. Was ist aber wenn es nur ein Element aus Root im ganzen Programm geben kann/sollte. Ist es dann nicht angebrachter dies als externe Variable zu schreiben? Die anderen Klassen greifen dann halt auf diese Var zu.



  • Was du mit externer Variable meinst, ist eine globale Variable. Das ist keine gute Lösung. Singleton ist da schon besser.

    Beim Singleton wird doch die Klasse immer neu erstellt.

    Ich weiß nicht, was du damit meinst. Ein Singleton erstellt keine Klassen. Das macht der Programmierer.



  • ja wenn ich im Programm ein Singleton erstelle, dann wird doch von dieser Klasse eine neue Instanz erstellt, oder?. Es gibt mal angenommen eine Membervariable in der Klasse welche nicht "nochmal" erstellt werden sollte.
    Nochmal weil zu Programmstart die Rootklasse erstellt wird.



  • Singletons werden nicht beim Programmstart (also vor dem Eintritt in die main-Funktion) angelegt. Das ist ein wesentlicher Unterschied zu globalen Variablen. Ein Singleton wird bei der ersten Benutzung angelegt (und zwar nur einmal, deswegen auch der Name SINGLEton).


Log in to reply