Den Code des überladenen Konstruktors wiederverwenden?
-
Hi,
Ich kann ein wenig Java und versuche mich jetzt an C++.
Aus Java kenne ich es so, dass man beim überladen von Konstruktoren nicht immer alles zweimal hinschreiben muss, ich kann zB in ner Klasse "Konto" sowas machen:... public Konto(int kontostand) { _kontostand = kontostand; } public Konto() { Konto(0); } ...Ich hoffe der Code war jetzt korrekt, ich habe lange kein Java mehr benutzt.
Ist sowas auch in C++ möglich?
Wenn ich da sowas probiere:... CKonto::CKonto() { CKonto(0); } CKonto::CKonto(int betrag) { _kontostand = betrag; } ......gibts zwar keine Fehlermeldung, aber wenn ich mir dann ein Objekt mit CKonto erstelle ist da nur irgendwas in _kontostand, aber nicht 0.
-
Nein, das geht so nicht. Hier wird nur ein temporäres Objekt erzeugt und gleich wieder zerstört. In diesem Fall würde aber ein Default-Argument reichen.
CKonto::CKonto(int betrag = 0) : _kontostand(betrag) {}Hier werden beide Fälle erschlagen. Wenn es komplizierter wird mußt du eine init()-Funktion erzeugen, die dann in den Konstruktoren aufgerufen wird.
-
Das Thema wurde gerade vor zwei Wochen besprochen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-228635.html
-
ok danke... noch ne frage: wenn ich das jetzt mit dem Default-Argument so mache, wie kann ich das dann in der Schnittstelle, also in der Header-Datei, kenntlich machen dass ich den Konstruktor auch ohne Argument aufrufen kann?
-
Hackfresser schrieb:
ok danke... noch ne frage: wenn ich das jetzt mit dem Default-Argument so mache, wie kann ich das dann in der Schnittstelle, also in der Header-Datei, kenntlich machen dass ich den Konstruktor auch ohne Argument aufrufen kann?
Dafür ist ja das Default-Argument da. Wenn nichts übergeben wird, dann wird der Wert genommen, den du dort angibst. (hier 0).
Allerdings würde ich empfehlen den ctor explicit zu machen.