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.


Anmelden zum Antworten