Récapitulatif - Gestionnaire de compte bancaire
Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 33 sur 104.
Défi
FacileConstruisons un gestionnaire de compte bancaire complet qui rassemble tous les concepts de propriétés de classe que vous avez appris dans ce chapitre : membres privés avec getters et setters, fonctions membres const, membres mutables, variables et méthodes statiques, et fonctions amies (friend).
Vous créerez deux fichiers pour organiser votre code :
BankAccount.h: Définissez une classeBankAccountqui gère les données du compte avec une encapsulation appropriée. Votre classe doit avoir :- Des membres privés :
accountNumber(string),ownerName(string),balance(double), et unmutable int queryCountpour suivre combien de fois le solde a été consulté - Un membre statique privé
totalAccountspour suivre le nombre de comptes existants - Un constructeur qui prend le numéro de compte, le nom du propriétaire et le solde initial. Il doit initialiser
queryCountà0et incrémentertotalAccounts - Des getters const :
getAccountNumber(),getOwnerName(), etgetBalance()— le getter du solde doit incrémenterqueryCountà chaque fois qu'il est appelé - Un getter const
getQueryCount()qui retourne le nombre de fois où le solde a été consulté - Une méthode
deposit(double amount)qui ajoute au solde uniquement si le montant est positif - Une méthode
withdraw(double amount)qui soustrait du solde uniquement si le montant est positif et ne dépasse pas le solde actuel - Une méthode statique
getTotalAccounts()qui retourne le nombre total de comptes créés - Déclarez une fonction amie
transfer(BankAccount& from, BankAccount& to, double amount)qui déplace de l'argent entre les comptes — elle ne doit effectuer le transfert que si le montant est positif et que la source dispose de fonds suffisants
Définissez le membre statique et la fonction amie après la définition de la classe.
- Des membres privés :
main.cpp: Démontrez toutes ces fonctionnalités fonctionnant ensemble. Lisez deux noms de propriétaires et deux soldes initiaux à partir de l'entrée (quatre lignes au total : name1, balance1, name2, balance2), puis :- Créez deux objets
BankAccountavec les numéros de compte"ACC001"et"ACC002" - Affichez
"Total accounts: <count>" - Affichez
"<name>: "pour le premier compte: $ "lt;balance>" - Affichez
"<name>: "pour le deuxième compte: $ "lt;balance>" - Déposez
500.0dans le premier compte - Affichez
"After deposit - <name>: "After deposit -pour le premier compte: $ "lt;balance>" - Transférez
300.0du premier compte vers le second en utilisant la fonction amie - Affichez
"After transfer:" - Affichez
" <name>: "pour le premier compte: $ "lt;balance>" - Affichez
" <name>: "pour le deuxième compte: $ "lt;balance>" - Affichez
"Query count for <name>: <count>"pour le premier compte
- Créez deux objets
Formatez toutes les valeurs de solde avec deux décimales en utilisant std::fixed et std::setprecision(2) de <iomanip>. Convertissez les entrées de solde de chaînes de caractères en doubles en utilisant std::stod().
N'oubliez pas les gardes d'inclusion dans votre fichier d'en-tête et d'inclure <string> et <iostream> là où c'est nécessaire.
Essayez vous-même
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// Lire l'entrée
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);
// Définir le formatage de sortie pour 2 décimales
std::cout << std::fixed << std::setprecision(2);
// TODO: Créer deux objets BankAccount avec les numéros de compte "ACC001" et "ACC002"
// TODO: Afficher "Total accounts: <count>"
// TODO: Afficher "<name>: $<balance>" pour le premier compte
// TODO: Afficher "<name>: $<balance>" pour le deuxième compte
// TODO: Déposer 500.0 sur le premier compte
// TODO: Afficher "After deposit - <name>: $<balance>" pour le premier compte
// TODO: Transférer 300.0 du premier compte vers le deuxième en utilisant la fonction amie (friend function)
// TODO: Afficher "After transfer:"
// TODO: Afficher " <name>: $<balance>" pour le premier compte (notez l'indentation de 2 espaces)
// TODO: Afficher " <name>: $<balance>" pour le deuxième compte (notez l'indentation de 2 espaces)
// TODO: Afficher "Query count for <name>: <count>" pour le premier compte
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesBuild et Compilation C++Fichiers d'en-tête et Fichiers sourceEspaces de noms et PortéeIntroduction à la POO en C++Classes vs ObjetsLe pointeur 'this'Méthodes (Fonctions membres)Attributs (Membres de données)Bases des Ctors et DtorsRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d'instance vs membres statiquesGetters et SettersFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d'accès à l'héritageOrdre d'appel des Ctor et DtorRedéfinition de méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif - Hiérarchie des employés10Présentation de la STL
Présentation et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - Fréquence des mots13Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonFabrique & Fabrique abstraitePatron MonteurPatron ObservateurPatron Stratégie2Gestion de la mémoire
Mémoire Pile vs TasPointeurs et RéférencesMémoire dynamique (new/delete)Smart Pointers en C++RAII en C++Récapitulatif - Gestionnaire de tableaux dynamiques5Encapsulation
Spécificateurs d'accès en C++Spécificateurs d'accès en profondeurMasquage d'informationStruct vs ClassClasses imbriquées et internesRécapitulatif - Système de gestion d'étudiants8Polymorphisme
Polymorphisme : Compilation vs ExécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d'interfaces en C++Dynamic Casting & RTTIRécapitulatif - Calculateur de formes11Concepts avancés de la POO
Composition vs HéritageMixins via CRTPIdiome PimplEffacement de typeEnum Classes & Typage fortGestion des exceptions en POOHiérarchies d'exceptions personnalisées14Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositeRAII en tant que patron3Constructeurs et Destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d'initialisation du constructeurConstructeurs déléguésAnalyse approfondie du destructeurRègle de trois / cinq / zéroRécapitulatif - Classe String6Surcharge d'opérateurs
Introduction à la surcharge d'opérateursSurcharge des opérateurs arithmétiquesSurcharge des opérateurs de comparaisonOpérateurs de fluxSurcharge de l'opérateur d'affectationSurcharge des opérateurs [] et ()Opérateurs de conversion de typeRécapitulatif - Classe Matrix9Templates
Templates de fonctionsTemplates de classesSpécialisation de templatesTemplates variadiquesBases de SFINAE & Type TraitsRécapitulatif - Conteneur générique