Konstruktor überladen: Doppelter Code oder auslagern?

  • C++

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Konstruktor überladen: Doppelter Code oder auslagern?

    Hallo Leute,
    ich würde gernen einen Konstruktor überladen. Folgender Code ist im Header:

    C-Quellcode

    1. BasicWindow(Kraftwerk_WindowType kwWindowType, const QString & stat_qstrWindowTitle, int iW, iH,
    2. QWidget * parent = 0);
    3. BasicWindow(Kraftwerk_WindowType kwWindowType, QWidget * parent = 0);


    Nun gibt es zwei Varianten die ich machen könnte.
    1. Ich nutze den selben Code in beiden Konstruktoren.
    2. Ich lager den Code in eine Funktion aus bspw. void initWindow() und calle im Konstruktor nur this->initWindow().

    Nur was davon ist schlauer? Ich stoße in letzter Zeit immer öfters auf diese Frage. Wäre nett wenn Ihr mir da mal das ein oder anderer erklären könntet.

    Übrigens: Ich benutze nicht exakt den selben Code. Im ersten Konstruktor wird noch this->resize(...) und this->setWindowTitle(...) verwendet.

    Grüße,
    Jan
    Software being "Done" is like lawn being "Mowed". (Jim Benson)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KidRick“ ()

    Doppelter Code ist schlechterer Code. ;)
    Also auslagern kann man da ruhig machen. Weiß gar nicht, ob C++ auch intern nochmal einen anderen Konstruktor aufrufen kann, wie zum Beispiel in C#. Müsstest mal schauen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade

    Trade schrieb:

    Weiß gar nicht, ob C++ auch intern nochmal einen anderen Konstruktor aufrufen kann

    stackoverflow.com/a/308318 dürfte deine Frage glaube ich beantworten. Aber gut dann lager ich das lieber aus anstatt doppelten Code zu verwenden :)

    Vielen Dank!
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Ah ok.
    Aber mindestens C++11 sollte doch eigentlich eh jeder haben. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Du kannst auch in C++ andere Konstruktoren aufrufen und dann trotzdem seperate Codes ausführen:

    C-Quellcode

    1. ​BasicWindow(Kraftwerk_WindowType kwWindowType, const QString & stat_qstrWindowTitle, int iW, iH,
    2. QWidget * parent): BasicWindow(kwWindowType, parent);
    3. BasicWindow(Kraftwerk_WindowType kwWindowType, QWidget * parent) : QObject(parent);


    Du kannst einen privaten Basis Konstruktor erstellen, der die gemeinsame Funktionalität beinhaltet und beide Konstruktoren den Basis Konstruktor aufrufen lassen und danach im Body die Funktionalität abbilden, die sich unterscheidet.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D