enum in methode



  • Habe folgendes Problem: Will mit meiner Methode "print" in der main-Funktion ausgeben, wie viele Eincent, Fuenfcent und Zehncent-Muenzen mein Sparschwein enthält. Hab dafür ein enum angelegt, hab jetzt aber keine Ahnung, wie ich ihm in der mainfkt sage, dass er auf die drei Werte zugreifen soll. Die Methode "einwerfen" soll ausserdem den Betrag in Klammer ausgeben, da ich ein Anfänger in puncto Klassen bin, weiss ich nicht einmal, wie ich ihm sage, dass er den einen Wert übergibt, hab zwar schon einiges probiert, hat aber nichts geklappt.

    Wäre sehr dankbar, wenn mir wer weiterhelfen könnte!

    Hier mein Ansatz:

    #include <iostream.h>
    class sparschwein
    {
    public:
    int leeren();
    int einwerfen();
    int print();

    private:
    int inhalt;
    };

    void sparschwein::leeren()
    {
    inhalt = 0;
    }

    void sparschwein::einwerfen()
    {

    return einwerfen;
    }

    int sparschwein::print()
    {
    enum muenzen {Eincent=1; Fünfcent=5; Zehncent=10};
    return print;
    }

    int main()
    {

    sparschwein a;
    sparschwein b;
    sparschwein c;
    a.leeren();
    cout<<"Der Inhalt des Sparschweins beträgt "<<a.leeren()<<" Cent!\n";
    b.einwerfen(10);
    cout<<"Der Inhalt des Sparschweins beträgt "<<b.einwerfen()<<" Cent!\n";
    c.print(2,4,6);
    cout<<"Der inhalt des Sparschweins beträgt "<<c.print()<<" 1 Cent Münzen,"<<
    c.print()<<" 5 Cent Münzen und "<<c.print()<<" 10 Cent Münzen!!\n";
    return 0;
    }



  • tut mir leid, aber ich glaube, daß der gesamte Code ziemlich sinnfrei und voller Fehler ist
    a) code tags benutzen
    b) Header mit extension .h sind veraltet; benutze:
    #include <iostream>
    using namespace std;
    c) überleg dir mal genau, was deine einzelnen Methoden machen sollen und schau dir noch einmal die Paramter und den Rückgabetyp an. zB ist einwerfen als void definiert, gibt aber trotzdem was zurück (guck dir da auch mal an was du zurückgibst: was soll zB return einwerfen; ????)
    d) print() stimmt hinten und vorne nicht
    print() hat laut Definition keine Parameter und der Enumerationstyp ist natürlich auch nur innerhalb print() bekannt.

    sorry, aber am besten fängst du noch einaml neu an und benutze ruhig mal ein Buch 😉



  • Sitze schon mit Buch da, da ist aber kein einziges brauchbares Beispiel und der Rest hört sich für mich wie Latein an!

    Wie schaut es damit aus, hab deine Ratschläge, so weit es mir möglich war befolgt!

    #include <iostream>
    using namespace std;
    class sparschwein
    {
    public:
    int leeren();
    int einwerfen();
    int print();

    private:
    int inhalt;
    enum muenzen {Eincent=1; Fünfcent=5; Zehncent=10};
    };

    int sparschwein::leeren()
    {
    inhalt = 0;
    return inhalt;
    }

    int sparschwein::einwerfen()
    {
    return inhalt;
    }

    int sparschwein::print(muenzen 1,muenzen 5,muenzen 10)
    {
    muenzen();
    return print;
    }

    int main()
    {

    sparschwein a;
    sparschwein b;
    sparschwein c;
    a.leeren();
    cout<<"Der Inhalt des Sparschweins beträgt "<<a.leeren()<<" Cent!\n";
    b.einwerfen(10);
    cout<<"Der Inhalt des Sparschweins beträgt "<<b.einwerfen()<<" Cent!\n";
    c.print(2,4,6);
    cout<<"Der inhalt des Sparschweins beträgt "<<c.print()<<" 1 Cent Münzen,"<<
    c.print()<<" 5 Cent Münzen und "<<c.print()<<" 10 Cent Münzen!!\n";
    return 0;
    }



  • Hier ist die Angabe, falls du dich dann mehr auskennst, was ich überhaupt tun will:

    Schreiben Sie eine Klasse, deren Objekte ein Sparschwein repräsentieren. In dieses Sparschwein können nur Münzen im Wert von 1 Cent, 5 Cent und 10 Cent geworfen werden. Implementieren Sie zumindest die Methoden leeren (Setzt den Inhalt des Sparschweins auf 0), einwerfen (ermöglicht es, Münzen in das Sparschwein einzuwerfen) und print (gibt den Inhalt des Sparschweins in der Form z.B.: "2*1Cent + 1*5Cent+3*10Cent = 37Cent" aus)
    Schreiben Sie

    die nötigen Konstruktoren, damit folgende Definitionen von Objekten möglich sind (unter der Annahme, dass die Klasse den Namen Sparschwein hat):
    Sparschwein a; // erzeugt ein leeres Sparschwein
    Sparschwein b=10; // erzeugt ein Sparschwein mit 10 Eincentmünzen als Inhalt
    Sparschwein c(2,3,4); // erzeugt ein Sparschwein mit 2 Eincent-, 3 Fünfcent- und 4 Zehncentmünzen als Inhalt

    Die Vergleichsoperatoren <, >, ==, !=, die jeweils den Inhalt zweier Sparschweine vergleichen

    Schreiben Sie ein Hauptprogramm, das mindestens zwei Instanzen Ihrer Klasse verwendet und die Verwendung der verschiedenen Methoden illustriert.



  • bitte verwende doch die Code-tags (das sind die kleinen buttons s.u.) 😞 😡
    grundsätzlich würde ich den Enumerationstyp nicht innerhalb der Klassendefinition, sondern davor in der Headerdatei der Klasse oder in einer eigenen .h definieren.
    Außerdem würde ich die Klasse so gestalten, daß ich ein zweites Attribut implementieren würde, da sich die Art der Münzen im Schwein nicht verändern kann; das sähe dann so aus:

    enum{/*....*/};
    class sparschwein{ 
        private: 
            int inhalt; 
            int muenzen[3];
        public:
            //.......
    };
    

    Dabei werden in dem Array muenzen gespeichert wieviele Münzen von einer bestimmten Art im Schwein sind.

    Methode einwerfen() soll nix zurückgeben, aber bekommt was übergeben und Attribute werden dort verändert, also, zB:

    void einwerfen(int muenz_art, int anzahl){
        muenzen[muenz_art] += anzehl;
        //...
    }
    

    Methode print ist ganz daneben 😞
    keine Parameter! Entweder ein string mit einer formatierten Abbildung des Inhaltes vom Schwein oder kein Rückgabetyp und die Ausgabe erfolgt innerhalb der Methode. noch schöner wäre aber zB:

    ostream & operator<<(ostream & os, const Sparschwein & schwein);
    


  • Doch was heisst das in deiner print Methode, soweit bin ich mit meinen C++Kuensten nocht nicht!

    Und wie waere das mit einem String zu loesen?



  • @hen:
    a) weißt du was ein Array ist?
    b) weißt du was ein String ist?



  • in der Aufgabenstellung steht doch genau drin was du machen sollst
    "print() gibt den Inhalt des Sparschweins in der Form z.B.: "2*1Cent + 1*5Cent+3*10Cent = 37Cent" aus"
    also: kein Rückgabewert, keine Parameter
    einfach alle Attribute eines Objektes, für welches die Methode aufgerufen wird, sofort in print ausgeben.


Anmelden zum Antworten