Konto mit funktionen
-
Hey, ich hätte eine frage bezüglich der funktion Kontostand bei mir wird undgewollt die Zahl -107374176 ausgegeben wird
(achso und könnte mir jemand sagen was *pzielkonto macht ?) <-- ist nicht mein Code deshalb, habe einen anderen nur ein bisschen verändert und neue funktionen hinzugefügt
Danke schonmal und
LG von dem c++ beginner philipp// Header file # include <iostream> # include <stdio.h> # include <string> using namespace std; class Konto { private: string Name; int Kontonummer; float Guthaben; int Geheimnummer; public: Konto (int kontonummer, float guthaben, int geheimnummer); int einzahlen(long betrag, int kontonummer); float abheben(string name, int geheimnummer, int kontonummer, long betrag); int ueberweisen(class Konto* pzielkonto, int zielkontonummer, long betrag); int kontostand(string name, int kontonummer); }; Konto::Konto( int kontonummer, float guthaben, int geheimnummer) { cout << "Dies ist der Konstruktor konto" << endl; kontonummer = Kontonummer; guthaben = Guthaben; geheimnummer = Geheimnummer; } int Konto::einzahlen( long betrag, int kontonummer) { if (kontonummer == Kontonummer) cout << "Dies ist der Konstruktor einzahlen" << endl; { Guthaben = Guthaben + betrag; return 1; } return 0; } float Konto::abheben(string name, int geheimnummer, int kontonummer, long betrag) { cout << "Dies ist der Konstruktor abheben" << endl; if (name == Name && geheimnummer == Geheimnummer && kontonummer == Kontonummer && (Guthaben - betrag) > 0) { Guthaben = Guthaben - betrag; return Guthaben; } return 0; } int Konto::ueberweisen(Konto* pzielkonto, int zielkontonummer, long betrag) { cout << "Dies ist der Konstruktor ueberweisen" << endl; if (betrag <= Guthaben) { (*pzielkonto).einzahlen (betrag, zielkontonummer); } return 0; } int Konto::kontostand(string name, int kontonummer) { cout << "Dies ist der Konstruktor Kontostand" << endl; if (kontonummer == Kontonummer && name == Name) { return Guthaben; } return Guthaben; }
// main() #include <iostream> #include <string> #include "Header.h" using namespace std; int main() { Konto Hans(1331, 500, 1212); Konto Max(1221, 400, 1313);// 1221 <-- kontonummer, 50.50 <--guthaben, 2012 <-- geheimnummer cout << Max.kontostand("Max", 1221) << endl; cout << Hans.kontostand("Hans", 1212) << endl; return 0; }
-
Das liegt daran, dass du die Variablen deines Objekts im Konstruktor nicht initalisierst. Schau die bitte die Zuweisungen an, besonder die Groß- und Kleinschreibung. Und in welche Richtung der Zuweisungsoperator funktioniert.
-
Und die obligatorischen Hinweise:
- Fließkommazahlen sind der schlechteste Basisdatentyp für Geldbeträge. Addiere mal genug krumme Beträge und staune. Nimm stattdessen so etwas wie
int
und stell es dir als Cent vor. int
ist hingegen denkbar schlecht für Zahlenfolgen, wie Kontonummern und Geheimnummern. Faustregel:int
ist zum Rechnen. Ist eine vermeintliche "Zahl" nicht zum Rechnen da, ist es wahrscheinlich gar keine Zahl, sondern eine Folge von Ziffernzeichen, also einstring
(mit gewissen Einschränkungen). Einfaches Gegenbeispiel, warum das schlecht ist: Experimentier mal ein bisschen mit Nullen als erster Ziffer.
PS: Falls dir das zu kurz war: Ich muss es leider bei jeder Kontoübungsaufgabe schreiben. Falls es zu kurz zum Verstehen war, frag nach. Datenmodellierung ist wichtig zu verstehen.
- Fließkommazahlen sind der schlechteste Basisdatentyp für Geldbeträge. Addiere mal genug krumme Beträge und staune. Nimm stattdessen so etwas wie
-
@DonthaveSkills sagte in Konto mit funktionen:
mir ist da gleich was aufgefallen
Konto::Konto( int kontonummer, float guthaben, int geheimnummer) { cout << "Dies ist der Konstruktor konto" << endl; kontonummer = Kontonummer; guthaben = Guthaben; geheimnummer = Geheimnummer; } int Konto::einzahlen( long betrag, int kontonummer) { if (kontonummer == Kontonummer) cout << "Dies ist der Konstruktor einzahlen" << endl; { Guthaben = Guthaben + betrag; return 1; } return 0; }
cout << "Dies ist der Konstruktor einzahlen" << endl;
Das ist eine Methode(Funktion) aber kein **Konstruktor **Hier ruft du den Konstruktor auf und erstellst dein Objekt (Instanz)
Konto Hans(1331, 500, 1212);
Und hier rufst du eine Methode eines Objektes auf
cout << Max.kontostand("Max", 1221) << endl;
https://de.wikipedia.org/wiki/Konstruktoren_und_Destruktoren