Objekte zu einer Klasse durch Einlesen hinzufügen



  • @out Erstmal danke für die Antwort.
    Es sollen aber Fließkommazahlen sein, aber ist ja erstmal egal. Den Startbetrag frage ich ja am Anfang ab in der main funktion drin.

    Zu der 4.: Was genau ist denn an der Bedingung falsch? Hatte es mir so gedacht, dass er jeden Betrag checkt der reinkommt und wenn der Kontostand kleiner als -1000 ist dann soll er mir einen Fehler anzeigen.

    Und zum Lösungsansatz, könntest du dann noch etwas mehr darauf eingehen? Also die Funktion gibt ja nichts zurück, also was genau macht dann der letzte Befehl da und muss ich dafür den rest vom Code umschreiben?



  • @xlogiaa sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

    Zu der 4.: Was genau ist denn an der Bedingung falsch? Hatte es mir so gedacht, dass er jeden Betrag checkt der reinkommt und wenn der Kontostand kleiner als -1000 ist dann soll er mir einen Fehler anzeigen.

    Joa, sehe ich auch so. Aber deine if gibt eine Fehlermeldung aus, wenn der Betrag größer als -1000 ist.

    Und zum Lösungsansatz, könntest du dann noch etwas mehr darauf eingehen? Also die Funktion gibt ja nichts zurück, also was genau macht dann der letzte Befehl da und muss ich dafür den rest vom Code umschreiben?

    Ich dachte, du willst mit setBalance den neuen Kontostand setzen. Und alter Kontostand + Einzahlung ergibt ja den neuen Kontostand. Wieso sollte die einzahlen-Funktion etwas zurückgeben? Wenn sie etwas zurückgibt, dann ob das Einzahlen erfolgreich war, sprich true/false.



  • @out Ah hast recht, muss umgekehrt sein, danke^^
    Und ich glaube ich habe ein paar Denkfehler eingebaut, schreibe gerade an einem neuen Code, kann ich dich dann hier markieren wenn ich soweit bin?



  • @out So hab es jetzt denke ich. Habe von vorne angefangen und auf deinem Lösungsansatz aufgebaut und es hat geklappt, vielen vielen Dank 😃

    #include <iostream>
    using namespace std;
    
    class BankAccount{
    private:
        float balance;
    public:
        float getBalance(){
            return balance;
        }
        void setBalance(float xbalance){
            if(balance>=-1000){
                cout << "Limit ueberzogen!" << endl;
                return;
            }
            else{
                balance = xbalance;
                
            }
        }
        BankAccount();
        BankAccount(float);
        void einzahlen()
        {
            cout << "Wie viel Geld moechten sie einzahlen?" << endl;
            int einzahlen;
            cin >> einzahlen;
            setBalance( balance + einzahlen );
        }
        void auszahlen()
        {
            cout << "Wie viel Geld moechten sie auszahlen?" << endl;
            int auszahlen;
            cin >> auszahlen;
            setBalance( balance - auszahlen );
        }
        
    };
    //------------------------------------------------------------
    BankAccount::BankAccount() : balance(100)
    { }
    BankAccount::BankAccount(float xbalance) : balance(xbalance)
    { }
    //--------------------------------------------------------------
    int main(){
        int x;
        BankAccount konto;
        cout << "Einzahlen(1) Auszahlen(2): ";
        cin >> x;
        switch(x){
            case 1: konto.einzahlen(); break;
            case 2: konto.auszahlen(); break;
        }
        
        
        
        return 0;
    }
    


  • Bezieht sich auf alten Code: Warum verändern die Methoden erhoehen() und abheben() nicht den Kontostand (BankAccount::z). Wieso gibt info() nicht den Kontostand (BankAccount::z) aus sondern irgendeinen der Funktion übergebenen Wert, der zufällig auch z heißt?

    @xlogiaa sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

        if(balance>=-1000){
            cout << "Limit ueberzogen!" << endl;
    

    Da stimmt immer noch was nicht.



  • @swordfish Ja das stimmt, aber habe jetzt alles mögliche rumprobiert und verstehe nicht was genau daran falsch ist.



  • Überlege mal welchen Wert du überprüfen möchtest, wenn du einen neuen Kontostand setzt.



  • @schlangenmensch @Swordfish Muss es "xbalance" statt "balance" sein?



  • @xlogiaa Das wäre ein guter Anfang aber noch nicht genug.



  • @swordfish Okay jetzt kann ich dir leider nicht mehr folgen 😃 Das Programm funktioniert jetzt so wie es soll. Könntest du einfach sagen was du meinst? Muss noch mit Vererbung weiter machen



  • void setBalance(float xbalance)
    {
        if(xbalance < -1000){
            cout << "Limit ueberzogen!\n";
            return; // dadurch wird das else überflüssig
        }
    
        balance = xbalance;
    }
    

    @xlogiaa sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

    Muss noch mit Vererbung weiter machen

    😲



  • @xlogiaa sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

    Okay jetzt kann ich dir leider nicht mehr folgen Das Programm funktioniert jetzt so wie es soll.

    Da würde ich nicht drauf wetten.

    Wie findest du das?

        void setBalance( float xbalance )
        {
            if( xbalance < -1000 )
            {
                cout << "Limit ueberzogen!" << endl;
                return;
            }
            balance = xbalance;
        }
    


  • @out @Swordfish Aber falsch war es dann ja nicht wirklich, oder? Einfach nur überflüssig. Und doch das Programm hat genau so funktioniert wie jetzt nachdem ich es angepasst habe.



  • @xlogiaa sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

    @out @Swordfish Aber falsch war es dann ja nicht wirklich, oder? Einfach nur überflüssig. Und doch das Programm hat genau so funktioniert wie jetzt nachdem ich es angepasst habe.

    Na doch, du hast das Gegenteil programmiert von dem, was du wolltest. Wie testest du denn dein Programm?



  • Vergleiche mal

    if(balance >= -1000) // mit oder ohne 'x' davor ... ziemlich egal
    

    mit

    if( xbalance < -1000 )
    


  • @out @Swordfish Okay das war jetzt mein Fehler, als ich mit xbalance herumprobiert hatte habe ich das Zeichen auch umgedreht, also war wirklich schon richtig nur hatte ich das nicht erwähnt, sorry! :smiling_face_with_open_mouth_cold_sweat:



  • Was soll denn eine "xBalance" sein?



  • @tggc Das macht man ja so mit get und set Methoden.



  • Ich finde dieses setBalance etwas merkwürdig. Auf ein Konto zahlt man ein, hebt ab und lässt sich den Kontostand anzeigen. Ich hätte Angst, wenn jemand meinen Kontostand abfragt, etwas drauf- oder runterrechnet und dann den Kontostand als Ganzes setzt. Ich würde das so umsetzen, falls die Aufgabenstellung das erlaubt:

    class Account
    {
       double Balance_; // ja, ich weiß, ungenau. Dient nur zur Übung
    public:
       Account() :
          Balance_( 0.0 )
       {
       }
    
       double balance() const
       {
          return Balance_;
       }
    
       void deposit( double Amount )
       {
          set_balance( balance() + Amount );
       }
    
       bool withdraw( double Amount )
       {
          return set_balance( balance() - Amount );
       }
    
    private:
       bool set_balance( double Balance )
       {
           if( Balance > -1000 )
           {
              Balance_ = Balance;
              return true;
          }
          return false;
       }
    };
    

    @TGGC
    Ich hoffe, du hast gut aufgepasst und verstanden, dass man das bei get- und set Methoden so macht. 🤣

    Edit:
    Implementierung per set_balance(). Benutzt deposit()/withdraw()/balance() als öffentliches Interface und set_balance im Sinne der (vermuteten) Aufgabenstellung.



  • @docshoe sagte in Objekte zu einer Klasse durch Einlesen hinzufügen:

    Ich hoffe, du hast gut aufgepasst und verstanden, dass man das bei get- und set Methoden so macht.

    Naja, es gibt halt verschiedene Konventionen.

    Ich finde zum Beispiel den _ für Membervariablen hässlich. Gut, das "x" als Präfix für Parameter habe ich noch gar nicht gesehen, dafür aber oft ein "a", insbesondere im Delphi-Umfeld (für "Argument"). Das "a" für Argumente finde ich weniger schlimm als ein "f" oder "_" für Member. Aber keine Ahnung, wie hier die vorherrschende Meinung ist. Oder bevorzugt ihr this->balance = balance? Letzteres finde ich auch in Ordnung. Jedenfalls lehne ich balance = xbalance; ab.


Anmelden zum Antworten