Objekte während der Laufzeit initialisieren



  • Hi Leute,

    Ich hoffe ich hab den Titel richtig formuliert, ich weiß nicht Recht ob initialisieren das richtige Wort ist.

    Ich soll als Übung ein Programm zur Verwaltung von Bankkunden sowie deren Konten schreiben, es soll möglich sein Geld zu überweisen, ein&auszuzahlen sowie neue Kunden erfassen und auch wieder löschen. Ich weiß jedoch nicht wie ich Objekte dynamisch initialisieren kann, vor allem weil ich nicht weiß wie ich die Objekte dann benennen kann.
    Eine dynamisch allozierte Variable wird mit

    int i = new int;
    

    initialisiert. Wie kann ich nun während der Laufzeit einen anderen Namen für die Variablen bekommen? Ich hoffe ihr wisst worauf ich hinauswill 😃

    Hier mein jetziger Code:

    #include <iostream>
    using namespace std;
    
    class Kunden{
    	int kundennummer, telephonnummer;
    	string adresse, geburtsdatum;
    	public:
    		Kunden(int Kundennummer,int telephonnummer,string adresse, string geburtsdatum);
    };
    
    Kunden::Kunden(int Kundennummer,int telephonummer,string adresse, string geburtsdatum){
    	this -> Kundennummer = Kundennummer;
    	this -> telephonnummer = telephonnummer;
    	this -> adresse = adresse;
    	this -> geburtstag = geburtstag;
    }
    
    class Konten{
    	int kontonummer;
    	bool kontoart;
    	double kontostand;
    	public:
    		void ueberweisung(Konten x, int betrag);
    		void einzahlung(int betrag);
    		void auszahlung(int betrag);
    };
    
    void Konten::ueberweisung(Konten x, int betrag){
    	x.kontostand -= betrag;
    	kontostand += betrag;
    }
    
    void Konten::einzahlung(int betrag){
    	kontostand += betrag;
    }
    
    void Konten::auszahlung(int betrag){
    	kontostand -= betrag;
    }
    
    int main (){
    
    return 0;
    }
    

    Ps: Ich würde die Kontoart (entweder Giro -oder Standardkonto) gerne mittels enum realisieren, jedoch weiß ich nicht wie das bei einem Objekt funktioniert. Meine Idee war einfach

    enum kontoarten {girokonto, standardkonto};
    kontoarten kontoart;
    

    zu den Instanzvariablen hinzuzufügen, hat jedoch leider nicht geklappt..

    Schonmal danke im Voraus 👍
    Cheers, Flügelnuss



  • Hallo,

    nur mal kurz & grob:
    Man sieht an den Klassennamen, dass du was falsch verstehst. 'Kunden' sind nicht Kunden, sondern ist ein Kunde!
    Eine Klasse Kunden (wenn man Sie denn brauch), hätte dann z.B. einen Vector<Kunde>.
    Das beantwortet vielleicht auch schon etwas deine Frage, wie das 'zur Laufzeit' aussehen wird.


  • Mod

    Außerdem hast du so ziemlich alle Daten falsch modelliert:
    Kundennummer: int? Willst du damit rechnen?
    Telefonnummer: int? Willst du damit rechnen? Mal ausprobiert, was passiert, wenn du eine Telefonnummer samt Vorwahl speichern willst?
    Geburtsdatum: string? Willst du denn nicht ausrechnen, wie alt jemand ist oder wann er Geburtstag hat?
    kontonummer: int? Siehe Telefonnummer
    kontoart: bool? Zwei Arten von Konto sollten für alle Ewigkeit genug für jeden sein.
    kontostand: double? Denn Geld ist ja bekanntlich ein Kontinuum 🙄



  • flügelnuss schrieb:

    void Konten::ueberweisung(Konten x, int betrag){
    	x.kontostand -= betrag;
    	kontostand += betrag;
    }
    

    noch ein Tip: Bei Deiner Implementierung der Überweisung wäre ich auch gerne der, der überweisen muss. Recht schmerzfrei für mich...



  • SeppJ schrieb:

    Kundennummer: int? Willst du damit rechnen?
    Telefonnummer: int? Willst du damit rechnen? Mal ausprobiert, was passiert, wenn du eine Telefonnummer samt Vorwahl speichern willst?
    kontonummer: int? Siehe Telefonnummer

    Darüber hatte ich nicht nachgedacht, danke! Mit welchem Datentyp kann ich denn so eine lange Zahl abspeichern? Oder geht das überhaupt nur mit einem array?

    kontoart: bool? Zwei Arten von Konto sollten für alle Ewigkeit genug für jeden sein.

    Ich weiß dass das eine sehr primitive Lösung ist und ich hätte es gerne als enum realisiert, mir ist jedoch wichtig dass ich die Grundzüge des Programms zum laufen bekomm bevor ich an so etwas arbeite 🙂

    kontostand: double? Denn Geld ist ja bekanntlich ein Kontinuum 🙄

    Ich versteh nicht ganz worauf du hinauswillst... 😕

    noch ein Tip: Bei Deiner Implementierung der Überweisung wäre ich auch gerne der, der überweisen muss. Recht schmerzfrei für mich...

    Beim Aufruf würde die Methode ja noch ein Objekt als Parameter erhalten, sprich x.ueberweisung(y, 50). Behebt dass das Problem?

    Danke für die vielen Antworten, ist echt eine tolle Community hier! 👍



  • flügelnuss schrieb:

    Beim Aufruf würde die Methode ja noch ein Objekt als Parameter erhalten, sprich x.ueberweisung(y, 50). Behebt dass das Problem?

    Nein. Überleg mal, ob y wirklich das Konto des Überweisenden ist. Tip: Lies mal was über den Unterschied zwischen "call by value" und "call by reference" bzw. allgemein über Referenzen...

    flügelnuss schrieb:

    Ps: Wieso meine Antwort jetzt 2mal hier steht weiß ich nicht, ich kann sie aber auch nicht löschen.. sorry!

    Kannst sie aber editieren und zumindest den Test löschen. Stört aber nicht weiter.

    EDIT/PS: Weiß nicht, ob es vom Modell her geschickt ist, die Überweisung als Member der Konto-Klasse zu haben. Schließlich macht nicht das Konto selbst die Überweisung, sondern ggf. die Bank.


Log in to reply