Anfänger: Nutzung von Objekten durch Objekte



  • Hallo,

    ein Problem, wie es eigentlich ständig auftritt, komme als Anfänger leider nicht auf die Lösung: Ein Objekt soll Arbeitsdaten eines Programms speichern (z.B. Daten zu Personen). Ein anderes Objekt ist der Nutzer dieses Speicherobjektes in dem Sinne, dass das ja auch eine Oberfläche (z.B. Qt) sein kann.

    Die Lebenszeit des Speicherobjektes soll sich über die Lebenszeit des Nutzerobjektes erstrecken. Wie kann das Nutzerobjekt auf das Speicherobjekt zugreifen? Definiere/Initialisiere das Speicherobjekt im Konstruktor des Nutzers, und dann? Im Bespiel ist der Zugriff aus Methoden des Nutzerobjektes nicht möglich.

    Wo nachschauen im C++-Primer oder ähnlichem?

    #include<iostream>
    
    class storage
    {
      public:
        storage(int b): a(b){};
        void change(int c){a = c;};
        void info(){std::cout << "gespeichert ist " << a << std::endl;};
      private:
        int a;
    };
    
    class user
    {
      public:
        user():b(14){storage s(b);
                     s.info();
                     s.change(modify(5));         // 1. V. -> ok
    //                  modify(5);              // 2. V. -> nicht ok
                     s.info();
        };
        int modify(int a){b = a; return b;};      // 1. V. -> ok
    //     void modify(int a){b = a; s.change(b);}   // 2. V. -> nicht ok
      private:
        int b;
    };
    
    int main(){
      user u;
    }
    

    Uwe



  • Pack die 'Daten-Objekte' (also die mit den Informationen, die später von einer Klasse verarbeitet/angezeigt werden) doch einfach in den privat-Teil (von
    'user') 😉 .

    Das Problem ist bei Dir, dass die erstellten Objekte natürlich auch nur im Konstruktor existieren.



  • CodeFinder schrieb:

    Pack die 'Daten-Objekte' (also die mit den Informationen, die später von einer Klasse verarbeitet/angezeigt werden) doch einfach in den privat-Teil (von
    'user') 😉 .

    Dann hätte man aber keine Kapselung der Daten (in storage) gegenüber einer Oberfläche (user) und der Code wäre schlecht portierbar.

    Das Problem ist bei Dir, dass die erstellten Objekte natürlich auch nur im Konstruktor existieren.

    Ja, eben! Und wie macht man das richtig?



  • Pluto schrieb:

    Dann hätte man aber keine Kapselung der Daten (in storage) gegenüber einer Oberfläche (user) und der Code wäre schlecht portierbar.

    Doch na klar. Du musst natürlich Zugriffsmethode in 'storage' bereitstellen, mit denen dann die Daten in 'storage' aus 'user' manipuliert werden können. Das Verhältnis nennt man dann HAT-Beziehung.



  • Danke, habe etwas über HAT- und KENNT-Beziehungen gelernt.

    Uwe



  • irgendwas gefällt mir an dem codestil gar nicht



  • TravisG schrieb:

    irgendwas gefällt mir an dem codestil gar nicht

    Hm, was meinst Du?



  • Die Klammern haben innen keinen abstand!
    {edfef;} anstatt { ffdgg; }
    Das macht schon viel aus, so sieht nicht so gepresst aus.


Anmelden zum Antworten