überladene Konstruktoren untereinander aufrufen?



  • Hallo, bin noch rel. neu in C++ und habe folgendes Programmstück, das auch anstandslos kompiliert wird:

    OnlineKonto::OnlineKonto(string name, int pin) : Konto( name )
    {	
    	this->pin = pin;
    }
    
    OnlineKonto::OnlineKonto(string name, int pin, double limit) : Konto( name, limit ){
    	OnlineKonto( name, pin );
    }
    

    Jetzt stellt sich mir die Frage, ob es den Konto-Konstruktor beim Aufruf von OnlineKonto(string, int, double) zweimal aufruft und ob das dann unter Umständen ein redundantes / verwaistes Objekt im Speicher generiert.

    Die beiden Kont-Konstruktoren stammen halt aus der Basis-Klasse Konto.

    Thx und Gruß, SubNet



  • Keine Angst so schnell entstehen in C++ keine verwaisten Objekte ;). Was allerdings passiert ist dass ein neues Objekt konstruiert und dann wieder verworfen wird. Man kann Konstruktoren nicht untereinander aufrufen.



  • Hallo

    ja es wird im Konstruktor eine zweite Instanz angelegt. Aber da es eine Stack-Instanz ist, wird sie mit dem Ende des Konstruktors gleich wieder gelöscht. Es ist kein Speicherloch, nur unnütze Ausführung.

    Du willst offenbar den Konstruktor mit verschiedenen Parametern ausführen lassen, aber gleiche Grundaktionen ausführen. Das geht so nicht, du müßtest die gleichartigen Aktionen in eine extra (private) Funktion auslagern.
    In deinem Fall läßt sich das aber auch eleganter lösen

    // Definition
    OnlineKonto(string name_, double limit_, int pin_ = 0);
    
    // Implementation
    OnlineKonto::OnlineKonto(string name_, double limit_, int pin_) : Konto( name_, limit_), pin(pin_)
    {
    }
    

    bis bald
    akari



  • Danke für die Antworten!

    akari, das ist glaube ich nicht ganz das, was ich wollte / machen sollte (Praktikumsaufgabe). ICh sollte 2 Konstruktoren mit unterschiedlich vielen Parametern (string, int) und (string, int, double) erstellen. Dachte halt um Code zu sparen ruf ich den einen vom anderen auf, aber wie ich es drehe, es kommt nie das Ergebnis raus, das ich haben will. eine PIN ist immer 0.

    Werde mir einfach merken: "Konstruktoren nicht untereinander aufrufen!"

    Damit umgehe ich alle Probleme und alternativ bleibt ja noch die private Auslagerungmethode.

    Thx und Gruß, SubNet



  • Nur um das nochmal klarzustellen, Du rufst keine Konstruktoren untereinander auf. Du erstellst ein neues Objekt, was sofort wieder gelöscht wird. Konstruktoren untereinander aufrufen geht in C++ schlicht und ergreifend nicht.


Anmelden zum Antworten