Verwalten von Konten mit hilfe eines Arrays



  • Wie pumuckl bereits sagte; Stell eine Frage 🙂

    Ansonsten:
    -Nutze Header- und Cpp-Dateien um Code anschaulicher zu machen
    -Namensräume möglichst nicht auflösen, damit keine Konflikte entstehen
    -Nutze Initialisierungslisten (def- und ctor)
    -Member fncs brauchen kein Semikolon nach der Klammer "}" nach dem Funktionsrumpf Ende wie public fncs
    -Mache Variablen const wenn du sie nicht veränderst
    😉



  • Kóyaánasqatsi schrieb:

    -Member fncs brauchen kein Semikolon nach der Klammer "}" nach dem Funktionsrumpf Ende wie public fncs

    Seit wann muss man das bei (ich nehme mal an, dass du mit public freie Funktionen meinst) freien Funktionen tun?



  • drakon schrieb:

    Seit wann muss man das bei (ich nehme mal an, dass du mit public freie Funktionen meinst) freien Funktionen tun?

    Ah, klar 😮 Sorry für den Fehler, bei Klassen natürlich. Man, OOP färbt ab 😃



  • 1. Polymorphe Basisklassen sollten mit einem virtuellen Destruktor ausgerüstet sein.

    virtual Konto::~Konto()
    {
    }
    

    2. Die Funktion inhaberUndKontoAnzeigen() sollte kein Member der Klasse, sondern global sein. Sie ist nämlich nicht virtuell und benötigt keinen Zugriff auf private Variablen. Benutze ausserdem Const-Referenzen zur Übergabe grösserer Objekte wie std::string und verzichte soweit möglich auf using namespace std; (Begründung siehe hier, SeppJs und folgende Beiträge).

    void inhaberUndKontoAnzeigen(const std::string& inhaber, Konto *pKto)
    {
       std::cout << "Inhaber: " << inhaber << std::endl;
       pKto->anzeigen();
       std::cout << std::endl;
    };
    

    3. Du vermeidest Codeduplizierung, in dem du für gleiche Aufgaben eine Funktion schreibst:

    void testeKonto(Konto& s, const std::string& inhaber)
    {
       inhaberUndKontoAnzeigen(inhaber, &s);
       s.einzahlen(100);
       s.auszahlen(1500);
       s.auszahlen(10);
       s.jahresabschluss();
       s.anzeigen();
    }
    


  • Und wie packt man nun die einzelnen konten in ein aarray?das ist mir auch noch nicht ganz klar geworden?zur verwaltung lediglich...



  • struct foo
    {
     int a_;
     int b_;
    };
    
    int main ()
    {
     foo a[2];
    
     foo f;
     f.a_ = 5;
     f.b_ = 2;
    
     a[0] = f;
     a[1] = f;
    }
    

    Alternativ kannst du auch gleich auf die Instanzen in dem Array zugreifen, anstatt das zu kopieren.
    Aber ich würde eh einen Container empfehlen. Siehe dazu bei den Artikeln des Forums (z.B std::vector, std::list o.ä. )



  • Ehm deine Klasse Konto, ist doch eine abstrakte Basisklasse. Man darf aber doch gar kein Objekt eines ADT`s erzeugen oder nicht?
    Wär also auch ein Fehler.



  • Mein Problem bei dem hier ist, dass ich beim erstellen eines neuen Kontos den namen mit übergeben möchte und dann mit der virtual void ausgabe() funktion ausgeben möchte.
    wo muss diese variable name hin?
    in die basisklasse konto? Wenn ich einen der Konstruktoren anpasse mit const char* name dann läuft das nicht.

    Gruß



  • fr33g schrieb:

    Ehm deine Klasse Konto, ist doch eine abstrakte Basisklasse. Man darf aber doch gar kein Objekt eines ADT`s erzeugen oder nicht?
    Wär also auch ein Fehler.

    Tut auch niemand. Also auch kein Fehler.

    carl88 schrieb:

    Mein Problem bei dem hier ist, dass ich beim erstellen eines neuen Kontos den namen mit übergeben möchte und dann mit der virtual void ausgabe() funktion ausgeben möchte.

    Was fürn Name? Was die Polymorphie/Array-Sache angeh: am deine verschiedene Konten in einem Array zu halten musst du sie dynamisch erzeugen und die Pointer im Array halten:

    const static std::size_t nKonten = 2;
    
    int main()
    {
      Konto* konten[nKonten];
    
      Konto* pk = new Girokonto();
      //tu was mit dem Konto
      konten[0] = pk;
    
      pk = new Sparkonto();
      //tu was mit dem Konto
      konten[1] = pk;
    }
    


  • Jap stimmt, sorry habe heut morgen bevor ich losmusste das ganze nur kurz überflogen und dachte hätte das gesehen dass ein Konto Objekt erzeugt wird.
    Aber ist ja nicht der Fall also sorry nomal.
    Nächstes mal les ich erst mal genauer bevor ich poste;-)



  • also meine main sieht gerade so aus:

    int main(void)
    {
    
       Girokonto hans;
       hans.neu_name("HANS");
       hans.anzeigen();
       hans.einzahlen(100);
       hans.anzeigen();
       hans.auszahlen(1300);
       hans.anzeigen();
       hans.auszahlen(100);
       hans.anzeigen();
       hans.einzahlen(100);
       hans.anzeigen();
       hans.jahresabschluss();
       hans.anzeigen();
       hans.trennen();
    
       Sparkonto siegfried;
       siegfried.neu_name("Siegfried");
       siegfried.anzeigen();
       siegfried.einzahlen(200);
       siegfried.auszahlen(1000);
       siegfried.auszahlen(100);
       siegfried.jahresabschluss();
       siegfried.anzeigen();
    

    ich hab ein paar andere funktionen aber als der Themenstarter.
    Um nun noch glücklich zu werden sollen zum beispiel siegfried und hans in einem array verwaltet werden.

    Also Pumuckl zufolge soll das dann etwa so aussehen:

    const static std::size_t nKonten = 2;
    
    int main(void)
    {
      Konto* bank[nKonten];
    
      Konto* pk = Girokonto hans;
      //Die ein/auszahlerei
      bank[0] = pk;
    
      pk = Sparkonto siegfried;
      //tu was mit dem Konto
      bank[1] = pk;
    }
    

    Und so weiter....

    Also muss ich um auf ein jeweiliges Konto zugreifen zu können nur

    pk=bank[1];
    //funktionen
    

    machen...?

    Ich versehen den Sinn der Sache, bzw aufgabenstellung so nicht. Vielleicht wenn man über die main noch Eingabe und Ausgabe hat, aber wenn man in der main das so direkt eingibt, ergibt es doch wenig Sinn?

    Auch vielen Dank meinerseits zu den Hilfestellungen!



  • Teil der Aufgabenstellung:
    in main():

    Erzeugen Sie ein Paar Konten und Girokonten und zahlen Sie Geld auf alle Konten ein (Konto*bank[6];)

    Hoffe das Hilft



  • Hier findet man die gesamte Aufgabenstellung 😉

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-258990.html


Anmelden zum Antworten