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.


  • Mod

    Und die obligatorischen Hinweise:

    1. 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.
    2. 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 ein string (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.



  • @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


Log in to reply