Dein Fortschritt:
0 / 0 Aufgaben
1
Die Mensakarte
AFB I–IIAn der Schule von Mo wird das Mittagessen mit einer aufladbaren Karte bezahlt. Die Informatik-AG bildet die Karte in C++ als Klasse nach; das Guthaben wird in Cent gespeichert, damit keine Rundungsfehler entstehen.
C++ · mensakarte.h
#ifndef MENSAKARTE_H #define MENSAKARTE_H class Mensakarte { private: int guthaben; // in Cent public: Mensakarte(int start) { guthaben = start; } void aufladen(int betrag) { if (betrag > 0) { guthaben = guthaben + betrag; } } bool bezahlen(int preis) { if (preis <= guthaben) { guthaben = guthaben - preis; return true; } return false; } int getGuthaben() { return guthaben; } }; #endif
In einem Testprogramm (mit #include <iostream>, #include "mensakarte.h" und using namespace std;) stehen in main nacheinander die folgenden fünf Anweisungen:
C++ · Ausschnitt aus main
Mensakarte k(500); // (1) k.guthaben = 10000; // (2) Mensakarte m; // (3) k.aufladen(-200); // (4) cout << k.getGuthaben; // (5)
Mo behauptet, nach diesen Anweisungen habe er genau 1,40 € auf seiner Karte:
C++ · Mos Tag in der Mensa
Mensakarte mo(1000); mo.bezahlen(420); mo.bezahlen(650); mo.aufladen(-300); mo.bezahlen(440);
- Erstellen Sie ein UML-Klassendiagramm der Klasse
Mensakarte. - Ordnen Sie jede der Anweisungen (1) bis (5) einer der Kategorien „wird übersetzt“ oder „Übersetzungsfehler“ zu.
- Bestätigen Sie Mos Behauptung über sein Guthaben.
Hinweise
Hinweis zu Aufgabe a)
Ein Klassendiagramm hat drei Felder: Name, Attribute, Methoden.
- steht für private, + für public; der Typ steht nach einem Doppelpunkt hinter dem Namen.Hinweis zu Aufgabe b)
Prüfen Sie jeweils: Ist das benutzte Attribut bzw. die Methode öffentlich? Gibt es einen passenden Konstruktor? Fehlen Klammern beim Methodenaufruf?
Hinweis zu Aufgabe c)
Verfolgen Sie den Wert von
guthaben Anweisung für Anweisung. Achtung: Nicht jeder Aufruf verändert das Guthaben.