Sparschwein



  • Danke, ich denke ich verstehe jetzt wie die Aufgabe eigentlich zu verstehen ist.
    Ja ich weiß, da ich noch nichts mit Klassen zu tun hatte und gerade erst angefangen habe damit, fällt es mir momentan noch sehr schwer sie überhaupt zu definieren.

    Danke für die Ansätze, werde es morgen gleich versuchen umzusetzen



  • Ich habe es jetzt nochmal versucht, ganz einfach nur immer alles mit cout auszugeben. Leider funktioniert nicht mal das...

    class Sparschwein{
    
    	int inhalt;
    	int muenzen[3];
    
    	public:
    		a.print();
    		b.print();
    		c.print();
    		d.einwerfen();
    		d.print();
    		d.leeren();
    		d.print();
    };	
    
    void ::a.print() {
    
    	cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    
    }
    
    void ::b.print() {
    
    	cout << "10 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent" << endl;
    
    }
    
    void ::c.print() {
    
    	cout << "47 * 1 Cent + 11 * 5 Cent + 42 * 10 Cent = 522 Cent" << endl;
    
    }
    
    void ::d.einwerfen(0, 8, 15) {
    
    	::d.print(0,8,15);
    }
    
    void ::d.print(0,8,15) {
    
    	cout << "0 * 1 Cent + 8 * 5 Cent + 15 * 10 Cent = 190 Cent" << endl;
    
    }
    
    void ::d.leeren() {
    
    	::d.print();
    
    }
    
    void ::d.print() {
    
    	cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    
    }
    


  • Was heißt denn das funktioniert nicht? Wir haben keine Glaskugeln.



  • Damit meine ich, es kommt beim kompilieren folgende Fehlermeldung:

    Sparschwein.C:7:3: error: ‘a’ does not name a type
    a.print();
    ^
    Sparschwein.C:8:3: error: ‘b’ does not name a type
    b.print();
    ^
    Sparschwein.C:9:3: error: ‘c’ does not name a type
    c.print();
    ^
    Sparschwein.C:10:3: error: ‘d’ does not name a type
    d.einwerfen();
    ^
    Sparschwein.C:11:3: error: ‘d’ does not name a type
    d.print();
    ^
    Sparschwein.C:12:3: error: ‘d’ does not name a type
    d.leeren();
    ^
    Sparschwein.C:13:3: error: ‘d’ does not name a type
    d.print();
    ^
    Sparschwein.C:16:9: error: expected initializer before ‘.’ token
    void ::a.print() {
    ^
    Sparschwein.C:22:9: error: expected initializer before ‘.’ token
    void ::b.print() {
    ^
    Sparschwein.C:28:9: error: expected initializer before ‘.’ token
    void ::c.print() {
    ^
    Sparschwein.C:34:9: error: expected initializer before ‘.’ token
    void ::d.einwerfen(0, 8, 15) {
    ^
    Sparschwein.C:39:9: error: expected initializer before ‘.’ token
    void ::d.print(0,8,15) {
    ^
    Sparschwein.C:45:9: error: expected initializer before ‘.’ token
    void ::d.leeren() {
    ^
    Sparschwein.C:51:9: error: expected initializer before ‘.’ token
    void ::d.print() {
    ^
    In file included from haupt.C:2:0:
    Sparschwein.C:7:3: error: ‘a’ does not name a type
    a.print();
    ^
    Sparschwein.C:8:3: error: ‘b’ does not name a type
    b.print();
    ^
    Sparschwein.C:9:3: error: ‘c’ does not name a type
    c.print();
    ^
    Sparschwein.C:10:3: error: ‘d’ does not name a type
    d.einwerfen();
    ^
    Sparschwein.C:11:3: error: ‘d’ does not name a type
    d.print();
    ^
    Sparschwein.C:12:3: error: ‘d’ does not name a type
    d.leeren();
    ^
    Sparschwein.C:13:3: error: ‘d’ does not name a type
    d.print();
    ^
    Sparschwein.C:16:9: error: expected initializer before ‘.’ token
    void ::a.print() {
    ^
    Sparschwein.C:22:9: error: expected initializer before ‘.’ token
    void ::b.print() {
    ^
    Sparschwein.C:28:9: error: expected initializer before ‘.’ token
    void ::c.print() {
    ^
    Sparschwein.C:34:9: error: expected initializer before ‘.’ token
    void ::d.einwerfen(0, 8, 15) {
    ^
    Sparschwein.C:39:9: error: expected initializer before ‘.’ token
    void ::d.print(0,8,15) {
    ^
    Sparschwein.C:45:9: error: expected initializer before ‘.’ token
    void ::d.leeren() {
    ^
    Sparschwein.C:51:9: error: expected initializer before ‘.’ token
    void ::d.print() {
    ^
    haupt.C: In function ‘int main()’:
    haupt.C:8:4: error: ‘class Sparschwein’ has no member named ‘print’
    a.print();
    ^
    haupt.C:10:18: error: conversion from ‘int’ to non-scalar type ‘Sparschwein’ requested
    Sparschwein b = 10;
    ^
    haupt.C:11:4: error: ‘class Sparschwein’ has no member named ‘print’
    b.print();
    ^
    haupt.C:13:26: error: no matching function for call to ‘Sparschwein::Sparschwein(int, int, int)’
    Sparschwein c(47, 11, 42);
    ^
    haupt.C:13:26: note: candidates are:
    In file included from haupt.C:2:0:
    Sparschwein.C:1:7: note: Sparschwein::Sparschwein()
    class Sparschwein{
    ^
    Sparschwein.C:1:7: note: candidate expects 0 arguments, 3 provided
    Sparschwein.C:1:7: note: Sparschwein::Sparschwein(const Sparschwein&)
    Sparschwein.C:1:7: note: candidate expects 1 argument, 3 provided
    haupt.C:14:4: error: ‘class Sparschwein’ has no member named ‘print’
    c.print();
    ^
    haupt.C:17:4: error: ‘class Sparschwein’ has no member named ‘einwerfen’
    d.einwerfen(0, 8, 15);
    ^
    haupt.C:18:4: error: ‘class Sparschwein’ has no member named ‘print’
    d.print();
    ^
    haupt.C:20:4: error: ‘class Sparschwein’ has no member named ‘leeren’
    d.leeren();
    ^
    haupt.C:21:4: error: ‘class Sparschwein’ has no member named ‘print’
    d.print();
    ^



  • Warum genau setzt du "a." davor?



  • Weil ich nach der Angabe von Marc-O gehe in meiner Main.

    Also a.print() bedeutet 0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent.

    In der Angabe, die ich bekommen habe steht auch: 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



  • Deine Klassendefinition ist trotzdem falsch und das "a.Print" macht so keinen Sinn.

    class Sparschwein{
    
        int inhalt;
        int muenzen[3];
    
        public:
            void print();
            void einwerfen(int muenze);
            void leeren();
    };
    

    Wenn dann muss das so aussehen.



  • also mehr so in diese Richtung?
    Tut mir sehr leidl, dass ich noch so wenig Ahnung habe von Klassen, fällt mir schwer daher das ganze zu verstehen.

    class Sparschwein{
    
    	int inhalt;
    	int muenzen[3];
    
    	public:
    
    		void print();
    		void einwerfen(int muenze);
    		void leeren();
    
    };	
    
    void ::a.print() {
    
    	cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    
    }
    
    void ::b.print() {
    
    	cout << "10 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent" << endl;
    }
    
    void ::c.print() {
    
    	cout << "47 * 1 Cent + 11 * 5 Cent + 42 * 10 Cent = 522 Cent" << endl;
    }
    
    void ::d.print() {
    
    	cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    
    }
    
    void ::d.einwerfen() {
    
    	::d.print(0,8,15);
    
    }
    
    void ::d.print(0,8,15) {
    
    	cout << "0 * 1 Cent + 8 * 5 Cent + 15 * 10 Cent = 190 Cent" << endl;
    }
    
    void ::d.leeren() {
    
    	::d.print(0,0,0);
    }
    
    void ::d.print(0,0,0) {
    
    	cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    }
    


  • Hallo,

    class Sparschwein{
    
        int inhalt;
        int muenzen[3];
    
        public:
    
            void print(int firstCoin, int secondCoind, int thirdCoin);
            void einwerfen(int firstCoin, int secondCoind, int thirdCoin);
            void leeren();
    
    }; 
    
    void Sparschwein::print(int firstCoin, int secondCoind, int thirdCoin) {
    
        cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl;
    
    }
    
    void Sparschwein::einwerfen(int firstCoin, int secondCoin, int thirdCoin) {
    
        ::print(firstCoind, secondCoin, thirdCoin);
    
    }
    
    void Sparschwein::leeren() { 
        ::print(0,0,0);
    }
    


  • Das ganze würde dann aber nicht mehr mit der alten Main funktionieren oder?
    Also nicht mehr mit:

    #include <iostream>
    #include "Sparschwein.C"
    using namespace std;
    
    int main () {
    
    	Sparschwein a;
    	a.print();
    
    	Sparschwein b = 10;
    	b.print();
    
    	Sparschwein c(47, 11, 42);
    	c.print();
    
    	Sparschwein d;
    	d.einwerfen(0, 8, 15);
    	d.print();
    
    	d.leeren();
    	d.print();
    
    return 0;
    }
    


  • Wieso denn nicht? Wenn du die entsprechenden Konstruktoren noch implementierst sollte das Problemlos funktionieren.



  • Das heißt ich muss jetzt nur noch bei meiner Klasse immer jeweils a. b. c. d. print, einwerfen und leeren einbauen oder?





  • warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
    int muenzen[3] {0, 0, 0};

    Liegt das eventuell, dass der Inhalt Privat ist und ich ihn nicht bearbeiten darf im Weiteren?
    Denn default mäßig ist ja am Anfang alles Privat in der Klasse.



  • Nein, weiter kau ich dir jetzt nicht vor. - Dann musst du selbst mal google / die Doku bemühen wie du ein Array Initialisierst. - Außerdem scheint bei dir ja C++ 11 vorhanden zu sein, sonst wäre da keine Warnung sondern ein Compiler-Fehler.



  • Ich darf nicht nicht in der Klasse initialisieren, sondern erst im Konstruktor selbst, ist das richtig?

    Danke für eure Hilfe! 🙂

    PS: Habe es jetzt bereits gelöst, ein großes Dankeschön an euch, für eure Hilfe! 🙂



  • Eine Frage hätte ich noch, und zwar meint ihr, ob gefragt ist, dass man verschiedene Methoden einbaut? Also der Benutzer festlegen kann, ob das Sparschwein geleert wird, wie viel hinein gegeben werden soll, etc...



  • Was steht denn in der Aufgabenbeschreibung?



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



  • Das war jetzt eigentlich nicht als Anweisung gedacht, den Inhalt des Startbeitrags nochmal zu Posten, sondern eher für dich um es noch mal zu lesen und zu interpretieren.

    ⚠ Du musst übrigens noch den Inhalt zweier Sparschweine vergleichen. ⚠


Anmelden zum Antworten