Funktion erzeugt Instanz einer Klasse und darauf mit anderen Funktionen zugreifen?



  • Bin noch ein newbie, also bitte nicht sauer über die wahrscheinlich dumme Frage sein.

    Ich habe eine Klasse die mehrere Funktionen enthält.
    Eine Funktion davon erzeugt eine Instanz von einer anderen Klasse.
    Nun will ich aber in den anderen Funktionen der Klasse auch auf diese Klasse zugreifen, aber nicht erneut erzeugen, das soll nur in der einen Funktion geschehen.

    Gibt es da irgendwelche Möglichkeiten um an die erzeugte Instanz der einen Funktion heranzukommen?

    Gruß skontox



  • Gibt es da irgendwelche Möglichkeiten um an die erzeugte Instanz der einen Funktion heranzukommen?

    Übergib das Objekt doch einfach als Parameter an die andere Memberfunktion. Falls mehrere Memberfunktionen die Dienste des Objekts in Anspruch nehmen, solltest du darüber nachdenken, aus dem Objekt eine Instanzvariable zu machen.



  • Danke erstmal, hättest Du da vielleicht mal ein kleines Beispiel für?

    Gruß skontox



  • Wieso machst du keine Membervariable ?



  • class Foo {
      public:
        void machwas();
    };
    
    class Bar {
    public:
      void fun1() {
        Foo f;
        fun2(f);
      }
      void fun2(Foo& f) {
        f.machwas();
      }
    };
    

    in fun1 wird eine Foo-Instanz erzeugt, per Referenz an fun2 übergeben, die dann die Memberfunktion machwas auf dieser Instanz aufruft.



  • Bashar schrieb:

    class Foo {
      public:
        void machwas();
    };
    
    class Bar {
    public:
      void fun1() {
        Foo f;
        fun2(f);
      }
      void fun2(Foo& f) {
        f.machwas();
      }
    };
    

    in fun1 wird eine Foo-Instanz erzeugt, per Referenz an fun2 übergeben, die dann die Memberfunktion machwas auf dieser Instanz aufruft.

    was ist der Vorteil gegenüber :

    class Foo {
      public:
        void machwas();
    };
    
    class Bar {
    Foo f;
    public:
    
      void fun1() {
        fun2();
      }
      void fun2() {
        f.machwas();
      }
    };
    

    ?



  • Was ist der Vorteil einer Säge gegenüber einem Apfelkuchen?



  • Besten Dank Euch beiden! Sehr interessant.

    Allerdings ist das bei mir doch nicht so ganz einfach.

    denn es handelt sich bei der einen Instanz um ein MICO(Corba)-Objekt.

    Außerdem meinte ich das noch etwas komplizierter. Das lag aber an meiner dusseligen Beschreibung.

    Ich hab eine GUI dort hab ich einen Knopf mit "Connect" und einen Knopf mit Datenanzeigen. Diese GUI ist eine eigene Klasse.
    Beim erzeugen diese GUI-Klasse wird automatisch auch eine Instanz von der Orb-Klasse erzeugt.Hier mal ein Beispiel:

    class GUI { 
      public:
    
        //Konstruktor
        GUI(){  
          m_porb = new Orb();
        }
    
        //Destruktor
        ~GUI(){
          delete m_porb;
        } 
    
        char* Connect(){
           this->Statusbox->insert(m_porb->initialisiere_Orb());
        }
    
        char* Datenanzeigen(){
           this->Statusbox->insert(m_porb->zeige_Artikel());
        }
    
        private:
           Orb* m_porb;      
    }; 
    
    class Orb { 
    public: 
      char* initialisiere_ORB(){
        ...
    
        // The _Naming Service returns a generic reference as a CORBA::Object
        // We need to narrow this to the desired type
        Stocklist_var stocklist = Stocklist::_narrow (obj); //<-hier wird die                       
                                                            //Instanz erzeugt
        ...
      }
    
      char* zeige_Artikel(){
        ...
        char* returndata;
        returndata=stocklist->ShowStockList(); //Das geht nicht, da er die Instanz   
                                               //hier nicht kennt.
                                               //aber so würde ich gerne drauf 
                                               //zugreifen. :-)
    
        return (returndata);
      } 
    };
    
    CORBA-Class  Stocklist { //auf diese Instanz kann ich zugreifen.
    };
    

    Gruß skontox



  • Puuuhh!
    Problem gelöst! Und schon bin ich wieder etwas schlauer geworden!

    "stocklist" hab ich als Membervariable in der Klassendefinition von orb

    erstellt und dann lief alles. Oh Mann, doch gar nicht so schwierig! 😉

    Gruß skontox


Anmelden zum Antworten