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 comptes bancaires complet qui réunit tous les concepts de propriétés de classe que vous avez appris dans ce chapitre : membres privés avec accesseurs et mutateurs, fonctions membres const, membres mutable, variables et méthodes statiques, et fonctions amies.
Vous allez créer deux fichiers pour organiser votre code :
BankAccount.h: définissez une classeBankAccountqui gère les données des comptes avec un encapsulage approprié. Votre classe doit comporter :- Des membres privés :
accountNumber(string),ownerName(string),balance(double), et unmutable int queryCountpour suivre le nombre de fois où 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 accesseurs const :
getAccountNumber(),getOwnerName()etgetBalance(): l’accesseur du solde doit incrémenterqueryCountchaque fois qu’il est appelé - Un accesseur const
getQueryCount()qui renvoie 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 renvoie le nombre total de comptes créés - Déclarez une fonction amie
transfer(BankAccount& from, BankAccount& to, double amount)qui transfère de l’argent entre des comptes. Elle ne doit effectuer le transfert que si le montant est positif et que le compte 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: montrez toutes ces fonctionnalités en action. Lisez deux noms de propriétaires et deux soldes initiaux depuis 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>: $<balance>"pour le premier compte - Affichez
"<name>: $<balance>"pour le deuxième compte - Déposez
500.0sur le premier compte - Affichez
"After deposit - <name>: $<balance>"pour le premier compte - Transférez
300.0du premier compte vers le deuxième à l’aide de la fonction amie - Affichez
"After transfer:" - Affichez
" <name>: $<balance>"pour le premier compte - Affichez
" <name>: $<balance>"pour le deuxième compte - Affichez
"Query count for <name>: <count>"pour le premier compte
- Créez deux objets
Formatez toutes les valeurs de solde avec deux décimales à l’aide de std::fixed et de std::setprecision(2) de <iomanip>. Convertissez les entrées de solde, de chaînes en nombres de type double, à l’aide de 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 les données d’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 format d’affichage avec 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 à l’aide de la fonction amie
// TODO: Afficher "After transfer:"
// TODO: Afficher " <name>: $<balance>" pour le premier compte (noter l’indentation de 2 espaces)
// TODO: Afficher " <name>: $<balance>" pour le deuxième compte (noter 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 externesGénération et compilation en C++Fichiers d’en-tête et fichiers sourceEspaces de noms et portéeIntroduction à la POO en C++Classes et objetsLe pointeur « this »Méthodes (fonctions membres)Attributs (membres de données)Bases des constructeurs et destructeursRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d’instance et statiquesAccesseurs et mutateursFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d’accès de l’héritageOrdre d’appel des constructeurs et destructeursRedéfinition des méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif : hiérarchie des employés10Vue d’ensemble de la STL
Vue d’ensemble et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - fréquence des mots13Modèles de conception, partie 1
Introduction aux modèles de conceptionModèle SingletonFabrique et fabrique abstraiteModèle BuilderModèle ObserverModèle Strategy2Gestion de la mémoire
Mémoire de pile ou de tasPointeurs et référencesMémoire dynamique (new/delete)Pointeurs intelligents 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 de l’informationStruct vs classeClasses imbriquées et internesRécapitulatif - Système de gestion des dossiers étudiants8Polymorphisme
Polymorphisme à la compilation vs à l’exécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d’interfaces en C++Conversion dynamique et RTTIRécapitulatif - Calculateur de formes3Constructeurs et destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d’initialisation des constructeursConstructeurs déléguésApprofondissement des destructeursRègle des trois / cinq / zéroRécapitulatif - Classe String6Surcharge des opérateurs
Introduction à la surcharge des 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 des templatesTemplates variadiquesBases de SFINAE et des traits de typesRécapitulatif - Conteneur génériqueEntraînez-vous par vous-même : Compilateur C++ en ligne