Frage zur Klassengestaltung?



  • Hallo,

    bei einer Aufgabe soll ich folgendes berücksichtigen:

    Es gibt 5 Sorten Schokolade:
    - Nuss: 1,00 €
    - Vollmilch 0,80 €
    - Zartbitter 0,85 €
    - Marzipan 1,50 €
    - Krokant 3,00 €

    Man soll ein einem kleinen Einkaufsprogramm diese 5 Sorten kaufen können:

    - bestellen
    - zwischenrechnungswert anzeigen
    - bezahlen
    - alles wieder zurückgeben und verschwinden.

    Ich hätte das so gemacht:

    1. eine Klasse schokolade erstellen mit den Variablen int index, string sorte, float preis
    2. in der main - Methode hätte ich dann 5 Objekte der Klasse erzeugt und mit Hilfe von switch - Case Funktionen die einzelnen Möglickeiten programmiert.

    Passt das so?

    Viele Grüße



  • Was für einen Index?



  • Hallo,

    der Index soll die Artikelnummer sein. Sprich Vollmilch soll 0815 haben, Nuss 2120 und so weiter....

    Viele Grüße


  • Mod

    float ist keine gute Wahl für Geld. float ist die Digitalcomputerannäherung an das Kontinuum. Geld ist aber inhärent gequantelt. Nimm lieber so etwas wie int und sieh es als Centbetrag an. Wenn du Spaß dran hast, auch noch in einer Geldklasse gekapselt.

    Außerdem sollst du deinen kleinen Laden auch als Objekt verwalten. Dieses hält dann eine Liste der bestellbaren Waren, bietet die gewünschten Funktionen und merkt sich selber die Zwischenergebnisse.



  • Sören20 schrieb:

    Ich hätte das so gemacht:

    1. eine Klasse schokolade erstellen mit den Variablen int index, string sorte, float preis

    Neben den Kommentaren zum Preis würde ich Variablen so benennen, das man sie auch sinnvoll versteht. Wie du hier bemerkst ist "index" eine schlechte Wahl, "artikelNummer" wäre verständlicher.

    Wobei ich in Hinblick auf mögliche Erweiterungen die Klasse auch eher Artikel nennen würde, und statt Sorte eine "bezeichnung" verwenden würde, ggf. garniert mit einer Artikelgruppe (Die im einfachen Fall ein weiterer String [hier Schokolade] sein könnte).

    Sören20 schrieb:

    2. in der main - Methode hätte ich dann 5 Objekte der Klasse erzeugt und mit Hilfe von switch - Case Funktionen die einzelnen Möglickeiten programmiert.

    Hier gibt es viele Wege und keine allgemeine Lösung.



  • Hallo:

    Ich habe für das Einkaufsprogramm eine Klasse 'Kaufladen erstellt.

    Die Klasse laden enthält unter anderem die Methode "void setGeld(int money)"

    wenn ich nun ein Objekt erzeuge:

    Kaufladen schokoladen;

    dann kann ich die Methode setGeld(int money) aufrufen.

    Wenn ich allerdings das Objekt so erzeuge:

    Kaufladen *schokoladen = new Kaufladen();

    erscheind beim Aufruf der Methode schokoladen.setGeld(100) die Meldung "setGeld hast not been declared"

    Warum ist das so? Wie kann ich das ändern?

    Vielen Dank!

    Viele Grüße



  • Mit new erstellst du einen Zeiger, en musst du zur Benutzung dereferenzieren. Benutz am besten keine Zeiger wenn du nicht weißt was sie tun. Und meld dich mal an sonst weiss ich nicht wirklich ob das ein Troll ist der einfach deinen Namen nutzt.



  • Danke für die Antwort.

    In Java ist das allerdings anders, oder? Da habe ich mit new ein Objekt erzeugt und dann musste ich nicht noch extra mit Zeigern oder ähnlichem hantieren.

    Ich hätte mir folgendes bei der Klasse mit der Schokolade vorgestellt:

    Schokolade *schoko [5];

    schoko[0] = new Schokolade(10, Vollmilch,80)
    schoko[1] = new Schokolade(10, Nulls, 100) etc.

    Wei bekomme ich das dann hin wenn ich die Instanzen statisch erzeuge:

    Schokolade schoke[5]

    Dann sind ja im Prinzip schon 5 Objekte angelegt? Wie ruf ich den Konstruktor Schokolade (int artikelnummer, string geschmack, int preis)

    mit jeweils unterschiedlichn Werten auf? Oder funktioniert sowas gar nicht?

    Viele Grüße



  • Verwende std::vector anstatt des rohen Arrays:

    std::vector<Schokolade> schokis;
    schokis.push_back(Schokolade(10, Vollmilch, 80));
    schokis.push_back(Schokolade(10, Nuss, 100));
    


  • Danke für die Tipps.

    Gibt es in java eigentlich auch solche Zeiger wie in c++? In Java hab ich das Objekt immer direkt mit new erzeugt. Und mir war auch nicht bekannt, dass ich in Java nicht mit dem Objekt selbst gearbeitet habe, sondern mit der Referenz?

    Unterscheiden sich hier Java und c++?

    Vielen Dank!



  • Sören20 schrieb:

    Gibt es in java eigentlich auch solche Zeiger wie in c++? In Java hab ich das Objekt immer direkt mit new erzeugt. Und mir war auch nicht bekannt, dass ich in Java nicht mit dem Objekt selbst gearbeitet habe, sondern mit der Referenz?
    Unterscheiden sich hier Java und c++?

    In Java werden alle "Objekte" automatisch per Zeiger benutzt. In C++ hat man immer die Wahl, ob man per Zeiger arbeiten will oder die Objekte direkt haben will (außer bei manchen Bibliotheken, die viel Spaß an delete this; haben.)


Anmelden zum Antworten