Zusammenfassung – Bankkontoverwaltung
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 33 von 104.
Aufgabe
EinfachLass uns einen vollständigen Bankkontenverwalter erstellen, der alle Konzepte zu Klasseneigenschaften zusammenführt, die du in diesem Kapitel kennengelernt hast: private Member mit Gettern und Settern, konstante Memberfunktionen, veränderliche Member, statische Variablen und Methoden sowie Freundfunktionen.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
BankAccount.h: Definiere eineBankAccount-Klasse, die Kontodaten mit geeigneter Kapselung verwaltet. Deine Klasse sollte Folgendes enthalten:- Private Member:
accountNumber(String),ownerName(String),balance(Double) und einenmutable int queryCount, um zu verfolgen, wie oft der Kontostand überprüft wurde - Ein privates statisches Member
totalAccounts, um zu verfolgen, wie viele Konten existieren - Einen Konstruktor, der die Kontonummer, den Namen des Kontoinhabers und den Anfangskontostand entgegennimmt. Er sollte
queryCountauf0initialisieren undtotalAccountserhöhen - Konstante Getter:
getAccountNumber(),getOwnerName()undgetBalance(): Der Kontostands-Getter solltequeryCountbei jedem Aufruf erhöhen - Einen konstanten Getter
getQueryCount(), der zurückgibt, wie oft der Kontostand überprüft wurde - Eine
deposit(double amount)-Methode, die den Kontostand nur erhöht, wenn der Betrag positiv ist - Eine
withdraw(double amount)-Methode, die den Kontostand nur verringert, wenn der Betrag positiv ist und den aktuellen Kontostand nicht überschreitet - Eine statische Methode
getTotalAccounts(), die die Gesamtzahl der erstellten Konten zurückgibt - Die Deklaration einer Freundfunktion
transfer(BankAccount& from, BankAccount& to, double amount), die Geld zwischen Konten überträgt. Sie sollte nur übertragen, wenn der Betrag positiv ist und die Quelle über ausreichende Mittel verfügt
Definiere das statische Member und die Freundfunktion nach der Klassendefinition.
- Private Member:
main.cpp: Zeige, wie all diese Funktionen zusammenarbeiten. Lies zwei Namen von Kontoinhabern und zwei Anfangskontostände aus der Eingabe ein (insgesamt vier Zeilen: name1, balance1, name2, balance2), und dann:- Erstelle zwei
BankAccount-Objekte mit den Kontonummern"ACC001"und"ACC002" - Gib
"Total accounts: <count>"aus - Gib für das erste Konto
"<name>: $<balance>"aus - Gib für das zweite Konto
"<name>: $<balance>"aus - Zahle
500.0auf das erste Konto ein - Gib für das erste Konto
"After deposit - <name>: $<balance>"aus - Übertrage mithilfe der Freundfunktion
300.0vom ersten Konto auf das zweite Konto - Gib
"After transfer:"aus - Gib für das erste Konto
" <name>: $<balance>"aus - Gib für das zweite Konto
" <name>: $<balance>"aus - Gib für das erste Konto
"Query count for <name>: <count>"aus
- Erstelle zwei
Formatiere alle Kontostandswerte mit zwei Dezimalstellen mithilfe von std::fixed und std::setprecision(2) aus <iomanip>. Konvertiere die Kontostandseingaben mithilfe von std::stod() aus Strings in Doubles.
Vergiss die Include-Guards in deiner Header-Datei nicht und füge <string> und <iostream> dort ein, wo sie benötigt werden.
Probier es selbst
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// Eingabe lesen
std::string name1, name2;
std::string balance1Str, balance2Str;
std::getline(std::cin, name1);
std::getline(std::cin, balance1Str);
std::getline(std::cin, name2);
std::getline(std::cin, balance2Str);
double balance1 = std::stod(balance1Str);
double balance2 = std::stod(balance2Str);
// Ausgabeformatierung auf 2 Dezimalstellen setzen
std::cout << std::fixed << std::setprecision(2);
// TODO: Erstelle zwei BankAccount-Objekte mit den Kontonummern "ACC001" und "ACC002"
// TODO: Print "Total accounts: <count>"
// TODO: Gib "<name>: $<balance>" für das erste Konto aus
// TODO: Gib "<name>: $<balance>" für das zweite Konto aus
// TODO: Zahle 500.0 auf das erste Konto ein
// TODO: Print "After deposit - <name>: $<balance>" for the first account
// TODO: Überweise 300.0 vom ersten Konto auf das zweite mithilfe der friend-Funktion
// TODO: Print "After transfer:"
// TODO: Gib " <name>: $<balance>" für das erste Konto aus (beachte den 2-Leerzeichen-Einzug)
// TODO: Gib " <name>: $<balance>" für das zweite Konto aus (beachte den 2-Leerzeichen-Einzug)
// TODO: Print "Query count for <name>: <count>" for the first account
return 0;
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamespaces & GültigkeitsbereichEinführung in OOP mit C++Klassen vs. ObjekteDer „this“-ZeigerMethoden (Member-Funktionen)Attribute (Datenmember)Grundlagen zu Ctors & DtorsRückblick – Einfacher Taschenrechner4Klassenattribute
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen und -KlassenZusammenfassung – Bankkontoverwaltung7Vererbung
Grundlagen der VererbungZugriffsebenen bei der VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick – Mitarbeiterhierarchie2Speicherverwaltung
Stack- vs. Heap-SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Intelligente Zeiger in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsbezeichner in C++Zugriffsbezeichner im DetailInformationsverbergungStruct vs. KlasseVerschachtelte und innere KlassenWiederholung – Studierendenverwaltungssystem8Polymorphie
Polymorphie zur Compilezeit vs. LaufzeitFunktionsüberladungVirtuelle Funktionen erneut betrachtetRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIRückblick – Shape-Calculator3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorMove-KonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktor im DetailDrei-/Fünf-/Null-RegelZusammenfassung – String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladung der Operatoren [] und ()TypkonvertierungsoperatorenWiederholung – Matrix-Klasse9Templates
FunktionstemplatesKlassen-TemplatesTemplate-SpezialisierungVariadische TemplatesGrundlagen zu SFINAE und Type TraitsRückblick – Generischer ContainerÜbe selbstständig: Online-C++-Compiler