Klassen: Hilfestellung bei Interaktion von verschiedenen Objekten



  • Hier der Code, wie ich mir das in etwa vorstelle:

    config.h:

    #ifndef CONFIG_H
    #define CONFIG_H
    
    class CONFIG {
    public: 
       changeConfig(int kind);
    };
    
    #endif
    

    exampleKlasse.h:

    #ifndef EXAMPLEKLASSE_H
    #define EXAMPLEKLASSE_H
    
    class ExampleKlasse{
    public: 
       sendchange();
    };
    
    #endif
    

    exampleKlasse.cpp:

    #include "exampleKlasse.h"
    #include "config.h"
    
    ExampleKlasse::change(){
       // Änderungen vornhemen
       *adresseDerAktivenConfig.changeConfig(3); //Mitteilen der Änderung an aktuelles config Objekt
    }
    
    #include "config.h"
    #include "exampleKlasse.h" // in der Realität würden mehrere Klassen existieren, die das selbe tun (im Sinne vom Zugreifen auf ein Config Objekt)
    
    int main()
    {
       CONFIG adresseDerAkivenConfig;
       //es werden sämtliche configs erstellt und die adresse der aktiven in der Variable gespeichert
       //darauf greift irgendeine beliebige Klasse, hier von der Klasse ExampleKlasse auf die aktuelle Config Klasse zu:
       ExampleKlasse Exam;
       Exam.change();
    }
    


  • Ich frage mich hier nun, wie man das optimieren kann, ohne, dass man jetzt die Möglichkeit verliert, dass verschiedene Config Objekte erstellt werden können, wobei nur eine aktiv ist.

    Ich könnte auch die Objekte als Array erstellen, jedoch müsste ich dann in jedem Objekt noch eine bool Variable haben, ob es aktiv wäre oder nicht. Bei jedem derartigen Methodenaufruf müsste ich dann das ganze Array der Reihe nach demjenigen durchsuchen, welches aktiv ist.
    Dann wäre keine solche Variable wie im Beispiel notwendig, würde doch aber nicht so effizient sein wie sonst.



  • Wo liegt das Problem?



  • irreal++ schrieb:

    Wo liegt das Problem?

    Dir fehlt grundlegendes Verständnis.



  • Gehts genauer?
    Die Aussage hilft mir jetzt nämlich genau 0 weiter...



  • OMG mach mal konkret.
    Was sind das für Klassen, was machen die, was für Config, wann soll die "umgeschaltet" werden, wieso nicht beim Funktionsaufruf etc.

    Dann kann dir evtl. jemand sagen wie man das als erfahrener Programmierer lösen würde. So abstrakt kann man es nicht beantworten. Das was du machen willst ist zwar fast sicher Unsinn, aber um zu sagen was die weniger unsinnige Lösung wäre braucht man einfach mehr Informationen.



  • Die anderen Klassen nehmen Einstellungen vom Benutzer auf und die configs sollen die Einstellungen verwalten. Umgeschaltet werden soll, wenn der der Benutzer andere Einstellungen verwenden möchte. Also ein Umschalten zwischen config1, config2 usw. und auf die umgeschaltete config soll dann auch von den anderen Klassen, die die Einstellungen vom Benutzer entgegen nehmen, aufnehmen und verarbeiten.

    Wenn ich es direkt in den Funktionsaufruf einbauen würde, würde ich mich ja auf eine bestimmte config festlegen, statt, dass automatisch die aktive config genommen wird. Welche aktiv ist, erfährt man ja von der Variable.

    Und umschalten beim Funktionsaufruf macht ja keinen Sinn, weil es ja unabhängig geschehen soll. Benutzer nimmt Einstellung vor != Benutzer möchte neue config verwenden/erstellen



  • Immer noch nicht verständlich?



  • struct Config { ... };
    struct ConfigChooser
    {
      std::vector<Config> configs;
      int current;
      ConfigChooser()
      { // init configs }
      void choose() { ... current = 42; ... }
      Config& currentConfig()
      {
        return configs[current];
      }
    };
    
    struct ConfigUser
    {
      void useConfig( Config& config ) { config.function(); }
    };
    
    int main()
    {
      ConfigChooser cc;
      ConfigUser cu;
       ...
      cu.useConfig( cc.currentConfig() );
    


  • Okay, aber wieso ist das nun eine bessere Lösung? Hier würde doch viel mehr Ressourcen benötigt werden, oder?

    Zudem, wieso ausgerechnet struct und nicht class? weil man dann public: nicht braucht?



  • irreal++ schrieb:

    Okay, aber wieso ist das nun eine bessere Lösung? Hier würde doch viel mehr Ressourcen benötigt werden, oder?

    Dann zeig mal, wie du es mit weniger machst.

    Zudem, wieso ausgerechnet struct und nicht class? weil man dann public: nicht braucht?

    Das kannst du halten wie ein Dachdecker, nur nicht so hoch.



  • Ja wie ich die ganze Zeit schon sage: eine (globale )Variable, die z.b. die Adresse enthält.



  • irreal+++ schrieb:

    Ja wie ich die ganze Zeit schon sage: eine (globale )Variable, die z.b. die Adresse enthält.

    Zeig die gesparten Resourcen!


Anmelden zum Antworten