Kontostand abrufen
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 26 von 61.
Aufgabe
EinfachDein Bankkonto ist fast fertig! Du hast die Möglichkeit erstellt, Konten anzulegen, Geld einzuzahlen und Geld abzuheben, aber ein entscheidender Teil fehlt noch. Momentan kann externer Code den aktuellen Kontostand nicht anzeigen. Beheben wir das, indem wir eine Getter-Funktion hinzufügen.
Ein Getter ist der richtige Weg, um verborgene Daten in einem gekapselten Modul zugänglich zu machen. Anstatt das Kontostandfeld öffentlich zu machen (wodurch die Kapselung verletzt würde), stellst du eine schreibgeschützte Funktion bereit, die den Wert zurückgibt. Dadurch bleiben die Daten geschützt, während weiterhin ein kontrollierter Zugriff möglich ist.
Du arbeitest weiterhin mit deinen drei Dateien:
account.h: Füge einen neuen Funktionsprototyp hinzu:get_balance. Diese Funktion erhält einenconst Account *(da sie die Daten nur liest und niemals verändert) und gibt eindoublezurück, das den aktuellen Kontostand darstellt. Behalte alle deine bisherigen Deklarationen bei.account.c: Implementiere die Funktionget_balance. Sie gibt einfach das verborgene Kontostandfeld des Kontos zurück. Beachte, dass diese Funktion auf die internen Daten zugreifen kann, weil sie in derselben Datei wie die Struktur definiert ist: Externer Code kann weiterhin nicht direkt hineinschauen.main.c: Jetzt kannst du endlich sehen, was in deinen Konten passiert! Erstelle ein Konto, führe einige Transaktionen durch und verwende deinen neuen Getter, um den Kontostand bei jedem Schritt anzuzeigen.
Du erhältst vier Eingaben: die Kontonummer (eine Ganzzahl), einen Einzahlungsbetrag, einen Auszahlungsbetrag und einen zweiten Einzahlungsbetrag.
Erstelle in deiner Hauptdatei ein Konto und gib seinen anfänglichen Kontostand aus (sollte 0.00 sein). Zahle den ersten Betrag ein und gib den neuen Kontostand aus. Hebe den angegebenen Betrag ab und gib den Kontostand erneut aus. Zahle schließlich den zweiten Betrag ein und gib den endgültigen Kontostand aus. Zerstöre anschließend das Konto.
Gib die Ausgabe in diesem Format aus:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedDabei ist 1001 die Kontonummer, und die Kontostände entsprechen: anfänglich (0.00), nach der Einzahlung von 500.00, nach der Abhebung von 300.00 und nach der Einzahlung weiterer 150.00. Formatiere alle Kontostandwerte mit zwei Dezimalstellen unter Verwendung von %.2f.
Mit diesem Getter bietet dein Bankkonto-Modul nun einen vollständigen, kontrollierten Zugriff auf die Kontodaten: Benutzer können den Kontostand anzeigen, ihn aber nur über deine validierten Einzahlungs- und Auszahlungsfunktionen ändern.
Probier es selbst
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double deposit1;
scanf("%lf", &deposit1);
double withdraw_amount;
scanf("%lf", &withdraw_amount);
double deposit2;
scanf("%lf", &deposit2);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
// TODO: Gib den Anfangssaldo mit get_balance aus
deposit(account, deposit1);
// TODO: Gib den Kontostand nach der ersten Einzahlung aus
withdraw(account, withdraw_amount);
// TODO: Gib den Kontostand nach der Abhebung aus
deposit(account, deposit2);
// TODO: Gib den Kontostand nach der zweiten Einzahlung aus
destroy_account(account);
printf("Account destroyed\n");
return 0;
}Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler