Skip to Content

Polymorphie

In dieser Aufgabe müssen UML Diagramme erstellt werden und eine Implementierung in C++ geschrieben werden.

In der folgenden Darstellung eines Klassendiagramms wird ein Ausschnitt aus einem Programm zur Verwaltung einer Bibliothek angezeigt. Jedes Buch hat spezielle Ausleihbedingungen, die die Ausleihgebühren bestimmen.

Probeklausur SoSe 2023

Die Methoden ausleihGebuehr und getAusleihZeitraum der jeweiligen Klassen sind wie folgt aufgebaut:

  • Buch: ausleihGebuehr = basisAusleihGebuehr * tage
    • Ausleihzeitraum ist 2 Monate
  • Roman: ausleihGebuehr = basisAusleihGebuehr * tage
    • Maximal 5 Euro
    • Ausleihzeitraum ist 1 Monat
  • Fachbücher: Feste Gebühr von 2 Euro, unabhängig von der Ausleihdauer
    • Ausleihzeitraum ist 2 Wochen

Stellen Sie mittels dynamischer Bindung sicher, dass die Methoden der zugehörigen Objekte verwendet werden, auch wenn auf Objekte der Unterklassen mittels Zeigern vom Typ der Oberklasse zugegriffen wird. Geben Sie eine Implementierung in C++ an, die die Klassen und Methoden entsprechend den Anforderungen implementiert.

#include <iostream> #include <string> class Buch { protected: string title; double basisAusleihGebuehr; public: Buch(const string& t, double basisAusleihGebuehr) : title(t), basisAusleihGebuehr(basisAusleihGebuehr) {} virtual ~Buch() {} virtual double ausleihGebuehr(int tage) { return basisAusleihGebuehr * tage; } virtual string getAusleihZeitraum() { return "2 Monate"; } }; class Roman : public Buch { public: Roman(const string& t, double basisAusleihGebuehr) : Buch(t, basisAusleihGebuehr) {} double ausleihGebuehr(int tage) override { double gebuehr = basisAusleihGebuehr * tage; if (gebuehr > 5.0) { return 5.0; } return gebuehr; } string getAusleihZeitraum() override { return "1 Monat"; } }; class Fachbuch : public Buch { public: Fachbuch(const string& t, double basisAusleihGebuehr) : Buch(t, basisAusleihGebuehr) {} double ausleihGebuehr(int tage) override { return 2.0; } string getAusleihZeitraum() override { return "2 Wochen"; } };
Last updated on