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; } };