Vererben von Konstruktoren (C++11)



  • Hallo allerseits :xmas1:

    Ich arbeite mich gerade durch die "Vererbung von Konstrukturen" durch, was ja mit C++11 eingeführt wurde. Leider habe ich keinen Compiler der das kann und es sieht so aus, dass es auch noch in keinem implementiert ist. Also muss ich wieder das "Orakel" hier fragen 😉

    Ausgang hierfür sind folgende Klassen:

    class Vater {
      public: 
        Vater(int ival=0) { cout << "Vater : " << ival << endl; }
        Vater(string s="") { cout << "Vater : " << s << endl; }
    };
    
    class Sohn : public Vater {
      public:
        Sohn(float fval):Vater(0) { cout << "Sohn : "<<  fval << endl; }
        Sohn(int ival):Vater(ival) {};
        Sohn(string s=""):Vater(s) {}
    };
    

    Soweit ich dass jetzt verstanden habe, kann ich mit der Vererbung von Konstuktoren eine Menge Tipparbeit in der Klasse Sohn sparen. Quasi, nach meinem Verständnis, kann ich dann die Klasse Sohn in C++11 wie folgt verkürzen:

    class Sohn : public Vater {
      public:
        using Vater::Vater;  // Vererbung der Konstruktoren
        Sohn(float fval) { cout << "Sohn : "<<  fval << endl; }
    };
    

    Kann mir das jemand bestätigen? Wie gesagt ich habe keine Compiler der das kann um es zu überprüfen 😞

    Schönen Nikolaus noch :xmas1:



  • class Vater { 
      public: 
        Vater(int ival=0) { cout << "Vater : " << ival << endl; } 
        Vater(string s="") { cout << "Vater : " << s << endl; } 
    };
    

    Welcher ist der Default-Konstruktor? 😉



  • Ansonsten scheint alles Richtig.



  • Vielen Dank 👍

    Hier noch der Default-Konstruktor 🕶

    class Vater {
      public: 
        Vater():Vater(0) {}  // C++11-Delegation
        Vater(int ival=0) { cout << "Vater : " << ival << endl; }
        Vater(string s="") { cout << "Vater : " << s << endl; }
    };
    

    Sone schrieb:

    Ansonsten scheint alles Richtig.



  • Super, jetzt hast du 3 default Konstruktoren.



  • Jetzt bin ich irritiert 😕

    Ich dachte immer der default sei der mit den leeren Klammern. Ich komme aus der JAVA-Welt und da wurde es mir so beigebracht 🙂 (http://en.wikipedia.org/wiki/Default_constructor). Denk ich da in die falsche Richtung 😕

    cooky451 schrieb:

    Super, jetzt hast du 3 default Konstruktoren.



  • Ein default Konstruktor ist ein Konstruktor den man ohne Argumente aufrufen kann. Das trifft bei dir auf alle zu.



  • Achso 🙄 Ich glaube so sollte es besser sein:

    class Vater {
      public:
        Vater():Vater(0) {}  // C++11-Delegation
        Vater(int ival) { cout << "Vater : " << ival << endl; }
        Vater(string s) { cout << "Vater : " << s << endl; }
    };
    

    cooky451 schrieb:

    Ein default Konstruktor ist ein Konstruktor den man ohne Argumente aufrufen kann. Das trifft bei dir auf alle zu.



  • Sollte gehen, aber das kann man halt auch so erreichen, da braucht man erstmal kein C++11:

    class Vater {
      public:
        Vater(int ival = 0) { cout << "Vater : " << ival << endl; }
        Vater(string s) { cout << "Vater : " << s << endl; }
    };
    


  • Vielen Dank für deine Geduld mit mir 👍 hab's kapiert

    cooky451 schrieb:

    Sollte gehen, aber das kann man halt auch so erreichen, da braucht man erstmal kein C++11:

    class Vater {
      public:
        Vater(int ival = 0) { cout << "Vater : " << ival << endl; }
        Vater(string s) { cout << "Vater : " << s << endl; }
    };
    

Anmelden zum Antworten