Verschiedene Konstruktoren verwenden



  • Hallo erst mal! 🙂

    Ich habe zwei Konstruktoren:

    Klassenname::Klassenname(int a, int b, int c)
    {
    private_a = a;
    private_b = b;
    private_c = c;
    }
    

    und

    Klassenname::Klassenname(int a, int b)
    {
    private_a = a;
    private_b = b;
    private_c = 5;
    }
    

    Im Hauptprogramm:

    ...
    cin<<a;
    cin<<b;
    cin<<c;
    
    Array[0} = new Klassenname(int a, int b, int c)
    

    Mein Ziel ist es jetzt es irgendwie zu erreichen, dass wenn ich kein c eingebe, der zweite Konstruktor mit dem default Wert 5 aufgerufen wird. Das das so aber irgendwie nicht geht, da die Konsole auf eine Eingabe wartet ist mir klar.
    Irgendwie möchte ich halt zur Programmlaufzeit entscheiden, ob ein c eingelesen wird oder halt der Defaultwert benutzt wird

    Danke euch für die Hilfe!



  • Noch kurz meine Idee, die mich aber irgendwie nicht zufriedend stellt 😉

    Abfrage ob Nutzer Defaultwert nutzen will oder selbst eingeben will und je nachdem

    Array[0} = new Klassenname(int a, int b, int c)
    

    oder

    Array[0} = new Klassenname(int a, int b)
    


  • Gast21 schrieb:

    Klassenname::Klassenname(int a, int b, int c)
    {
    private_a = a;
    private_b = b;
    private_c = c;
    }
    

    und

    Klassenname::Klassenname(int a, int b)
    {
    private_a = a;
    private_b = b;
    private_c = 5;
    }
    

    Besser:

    Klassenname::Klassenname(int a, int b, int c = 5)
     : private_a(a), private_b(b), private_c(c) { }
    

    Meine Idee wäre es, dass nur eine Zeile eingelesen wird und je nach dem, ob diese zwei oder drei Zahlen enthält, der Default-Wert angenommen wird oder eben nicht.

    #include <sstream>
    ...
    
    cout << "Gib a, b und ev. c ein, dann Enter: " << flush;
    string s;
    getline(cin, s);
    istringstream i(s);
    i >> a >> b;
    if (i >> c)
      array[0] = new Klassenname(a, b, c);
    else
      array[0] = new Klassenname(a, b);
    


  • Hi,

    Klassenname::Klassenname(int a, int b, int c = 5)
    {
    private_a = a;
    private_b = b;
    private_c = c;
    }
    

    edit: zu langsam 😞


Anmelden zum Antworten