Folgende C++–Sprachmittel sollen zum Einsatz kommen:
- Überschreiben von Methoden
- Schlüsselwörter
virtual,overrideundfinal - Schnittstellenkonzept (Interface)
- Abstrakte Basisklasse
Erstellen Sie eine C++-Klasse, die das Guthaben eines Kontos verwaltet. Die Kontonummer wird von dieser Klasse mit Hilfe einer Klassenvariablen bestimmt.
Die Klasse soll Methoden deposit zum Einzahlen und withdrawal zum Abheben besitzen.
Auskünfte über das Bankkonto können mit Hilfe der Eigenschaften getNumber (Kontonummer)
und getBalance (Kontostand) eingeholt werden.
Da das Bankinstitut mehrere Arten von Konten seinen Kunden anbietet, ist der Klassenentwurf in mehreren Ebenen zu gestalten:
- Schnittstelle
IAccount– Beschreibung der Methoden, die alle Klassen, die ein Bankkonto realisieren, haben sollten.
Oder anders formuliert: Was sollten alle Realisierungen einer Bankkonto-Klasse für Methoden haben? - Klasse
Account– Teilweise Realisierung der Methoden der KlasseAccount– Beschreibung siehe weiter unten. - Klassen
CurrentAccount(Girokonto),StudentsAccount(Schülerkonto) undDepositAccount(Sparbuch).
Schreiben Sie drei weitere Klassen CurrentAccount (Girokonto), StudentsAccount (Konto ohne Überziehungsrahmen) und DepositAccount (Sparbuch), die Sie geeignet mit der Klasse Account in Beziehung setzen.
Die drei Klassen sollen folgende Eigenschaften aufweisen:
-
Klasse
CurrentAccount
Ein Girokonto darf um ein Dispolimit überzogen werden, das bei der Kontoeröffnung festzulegen ist. Das Dispolimit ist als Eigenschaft der KlasseCurrentAccountzu realisieren und kann zu einem späteren Zeitpunkt auch angepasst werden. Der Einfachheit halber legen wir zu Grunde, dass für das Überziehen des Girokontos keine Zinsen zu entrichten sind. -
Klasse
StudentsAccount
Ein Konto für Schüler und Studenten verhält sich im Prinzip wie ein Girokonto. Der einzige Unterschied besteht darin, dass es keinen Überziehungsrahmen besitzt. -
Klasse
DepositAccount
Auf einem Sparkonto fallen für das eingezahlte Geld Zinsen an. Der Zinssatz des Sparkontos ist als Eigenschaft der KlasseDepositAccountdarzustellen. Nach der Kontoeröffnung kann der Zinssatz nicht mehr geändert werden. Für die Gutschrift der Zinsen auf dem Sparkonto bedarf es einer zusätzlichen MethodecomputeInterest. Diese Methode besitzt als Parameter die Anzahl der Tage, für die die Zinsen gutzuschreiben sind. Die Zinsen sind nach der Formel$$Zinsen = \frac{AnzahlTage}{365} * \frac{Zinssatz}{100} * Guthaben$$ zu berechnen.
Man könnte geneigt sein, die beiden Kontotypen Studentenkonto und Girokonto in Beziehung zueinander zu setzen. Zum Beispiel könnte man argumentieren, ein Studentenkonto „ist-ein” Girokonto mit Dispolimit 0. Oder auch anders herum: Ein Girokonto „ist-ein” Studentenkonto erweitert um das Feature eines Dispolimits.
Warum führen beide Überlegungen nicht ans Ziel?
Antwort:
Überlegung 1:
Ein Studentenkonto ist kein Girokonto, weil es sonst die Methode setLimit des Girokontos erben würde.
Dies ist aber nicht erwünscht.
Überlegung 2:
Ein Girokonto ist kein Studentenkonto, weil es sonst die Methode withdraw des Studentenkonto ersetzen müsste.
Technisch gesehen geht dies, konzeptionell ist diese Vorgehensweise aber eher fragwürdig.
Die Programmausgabe studieren Sie an folgenden Codefragmenten:
Beispiel:
CurrentAccount ca(1000);
ca.deposit(100);
ca.withdraw(40);
ca.print();
StudentsAccount sa;
sa.deposit(50);
sa.withdraw(25);
sa.print();
DepositAccount da(4.0);
da.deposit(200);
da.withdraw(120);
da.updateInterest(31);
da.print();Ausgabe:
CurrentAccount:
[Nr. 10000]:
Balance = 60;
Limit = 1000;
StudentsAccount:
[Nr. 10001]:
Balance = 25;
DepositAccount:
[Nr. 10002]:
Balance = 80.2718;
InterestRate = 4;
Beispiel:
CurrentAccount ca(1000);
ca.deposit(100);
ca.print();
StudentsAccount sa;
sa.deposit(50);
sa.print();
DepositAccount da(4.0);
da.deposit(200);
da.print();
IAccount* accounts[3]{ &ca, &sa, &da };
double totalBalance = 0;
for (int i = 0; i < 3; ++i) {
totalBalance += accounts[i]->getBalance();
}
std::cout << "Total Balance: " << totalBalance << std::endl;Ausgabe:
CurrentAccount:
[Nr. 10000]:
Balance = 100;
Limit = 1000;
StudentsAccount:
[Nr. 10001]:
Balance = 50;
DepositAccount:
[Nr. 10002]:
Balance = 200;
InterestRate = 4;
Total Balance: 350