Objekte zu einer Klasse durch Einlesen hinzufügen
-
@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 Methodenerhoehen()
undabheben()
nicht den Kontostand (BankAccount::z
). Wieso gibtinfo()
nicht den Kontostand (BankAccount::z
) aus sondern irgendeinen der Funktion übergebenen Wert, der zufällig auchz
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 ichbalance = xbalance;
ab.