Frage zu static



  • Hallo,

    ich habe eine kleine Frage zu static. Ich habe eine Application Klasse mit ausschließlich statischen Elementen. Darunter auch ein Options Objekt, welches ebenfalls statisch ist.

    Folgender Code ist mir nicht so ganz klar:

    #include <iostream>
    using namespace std;
    
    class Options{
    public:
      Options(){
        opt1 = false;
      }
    
      void setOpt1(bool val) {
        opt1=val;
      }
    
      bool getOpt1() {
        return opt1;
      }
    private:
      bool opt1;
    };
    
    class Application {
    public:
      static Options getOptions(){
        return opts;
      }
      static Options* getOptionsPtr(){
        return &opts;
      }
    private:
      static Options opts;
    };
    
    Options Application::opts;
    
    int main(){
      Application::getOptions().setOpt1(true);
      if (Application::getOptions().getOpt1()){
        cout << "opt1 true" << endl;
      }else{
        cout << "opt1 false" << endl;
      }
    
      Application::getOptionsPtr()->setOpt1(true);
      if (Application::getOptionsPtr()->getOpt1()){
        cout << "opt1 true" << endl;
      }else{
        cout << "opt1 false" << endl;
      }
      return 0;
    }
    

    Greife ich mit der getOptions() Methode zu, klappt es leider nicht wie erwartet.

    Frage 1: Warum wird bei getOptions() nicht true zurückgeliefert?
    Frage 2: Mit dem Ptr läuft es so wie erwartet, aber sollte man das in dieser Form so machen?

    Ausgabe:

    opt1 false
    opt1 true
    


  • Deine getOptions() Funktion liefert eine Kopie zurück! Daher änderst du mit deinem

    Application::getOptions().setOpt1(true);
    

    nur den Wert der Kopie. Die getOptions() Funktion sollte eine Referenz zurückgeben. Ob Referenz oder Pointer ist aber wohl Geschmackssache.



  • static schrieb:

    Ich habe eine Application Klasse mit ausschließlich statischen Elementen. Darunter auch ein Options Objekt, welches ebenfalls statisch ist.

    Warum? Schon mal etwas von namespace gehört?

    static schrieb:

    Frage 1: Warum wird bei getOptions() nicht true zurückgeliefert?

    Weil getOptions() eine Kopie der Optionen liefert.

    static schrieb:

    Frage 2: Mit dem Ptr läuft es so wie erwartet, aber sollte man das in dieser Form so machen?

    Schon mal etwas von Referenzen gehört?


Log in to reply