Konstruktor Weiterleitung



  • Hallo zusammen,

    in Java kann man den Konstruktor an einen anderen Konstruktor weiterleiten:

    z. B.

    class Test{
      public Test(){
      }
    
      public Test(/*Parameter*/){
        this();
      }
    }
    

    Geht sowas auch in C++?
    Oder macht man das mit nem Methodenaufruf?

    Gruß,
    CSpille



  • Nein, das geht nicht. Du kannst dir aber eine Init Methode schreiben, und diese
    dann aus verschiedenen Konstruktoren aufrufen. Aber in der Regel benötigt man
    sowas auch nicht 🙄



  • Wofür würdest du denn das konkret benötigen? Wenn ich das in Java einsetze, dann nur weil mal wieder keine Default-Parameter möglich sind.

    MfG SideWinder



  • CSpille schrieb:

    Geht sowas auch in C++?

    Nein.

    CSpille schrieb:

    Oder macht man das mit nem Methodenaufruf?

    Ja. Kommt fast auf's selbe raus, falls man das überhaupt mal braucht. Siehe Posts über mir.



  • Du hast recht...

    Ich brauch es auch für die Übergabe von Standard-Parametern.
    Allerdings möchte ich unter Linux und Windows den gleichen Header
    verwenden, allerdings haben die Koastanten unterschiedliche Werte

    @phlox81: Genau das meinte ich mit dem Methodenaufruf

    thx,
    CSpille



  • CSpille schrieb:

    Ich brauch es auch für die Übergabe von Standard-Parametern.
    Allerdings möchte ich unter Linux und Windows den gleichen Header
    verwenden, allerdings haben die Koastanten unterschiedliche Werte

    #ifdef WIN32
      foo( int myVar = 42 );
    #else
      foo( int myVar = 312000 );
    #end
    

    Davon ab wüsste ich nicht wie dir verkettete Konstruktoren in diesem Fall weiterhelfen könnten... du?



  • Also ich hab mir das etwa so gedacht:

    Datei window.h

    class Window{
    
    public:
      Window(int x, int y);
      Window();
      void methode(); // plattformunabhängig
    }
    

    Datei window.cpp

    void Window::methode();
    }
    

    Datei window_win.cpp

    #ifdef WIN32
    Window::Window(int x, int y){
      // native Methoden-Aufrufe
    }
    
    Window::Window(){
      this(DEFAULT_X, DEFAULT_Y); // mir ist klar, dass es so nicht geht...
    }
    #endif
    

    Oder macht das deiner Meinung nach auch keinen Sinn?
    So ist das für die Betriebssysteme schön inhaltlich getrennt...

    Gruß,
    CSpille



  • // window.h
    class Window
    {
        public:
            Window (int x = DEFAULT_X, int y = DEFAULT_Y);
            void methode ();
    };
    
    // window_win.cpp
    #ifdef WIN32
        void methode ()
        {
            // do sth
        }
    #ndif
    
    // window_other.cpp
    #ifndef WIN32
        void methode ()
        {
            // do sth else
        }
    #endif
    

    MfG SideWinder



  • Hallo SideWinder,

    mir ist klar, dass ich es auch so machen kann...
    Ich schätze du hast im Header ein #ifdef um den Kostruktor vergessen,
    da sonst immer der gleiche Parameter übergeben wird und genau
    diese #ifdef will ich im Header vermeiden...
    Was mir gerade auffällt bei der Fenstergröße haben die Konstanten,
    gleub ich, den gleichen Wert, ist also nen schlechtes Beispiel

    Aber ne andere Frage:
    Kann ich als Standard-Parameter auch irgendwie this übergeben?
    Ich dachte an einen Thread ala Java, der als Runnable standardmäßig
    sich nimmt.

    Gruß



  • class Window
    {
        public:
            Window (int x = DEFAULT_X, int y = DEFAULT_Y);
            Window (){ *this = Window(DEFAULT_X,DEFAULT_Y); }
    };
    

Anmelden zum Antworten