Cours:PooTD pointeurs
TD : pointeurs et objets
On continue avec nos classes Compte
et Client
. Implémentation de la classe Client
:
class Client {
private:
string name;
int nb_comptes=0;
int numero_comptes[32];
public:
Client(string _name) {
name = _name;
}
void set_name(string _name) {
name = _name;
}
string get_name() {
return name;
}
void add_compte(int num_cpt) {
numero_comptes[nb_comptes] = num_cpt;
nb_comptes++;
}
string to_string() {
string str = "Client\nNom: " + name;
if (nb_comptes>0) {
for (int i=0; i<nb_comptes; i++) {
str = str + "\n Compte " + std::to_string(i+1) + " - numero = " + std::to_string(numero_comptes[i]);
}
}
return str;
}
};
L'inconvénient de l'implémentation du TD 2 est que dans la classe Client
les comptes bancaires ne sont représentés que par leur numéros, ce qui complique leur manipulation.
L'objectif va être de modifier le code de la classe Client
afin que les comptes bancaires soit représentés par des instances de la classe Compte
.
Les attributs de Client
sont donc maintenant :
class Client {
private:
string name;
int nb_comptes=0;
Compte* cpts[32];
...
}
- On stocke donc maintenant les comptes bancaires dans un tableau de pointeurs vers des instances de
Compte
.
- Travail à faire :
- Modifier l'implémentation de la méthode
add_compte()
. - Il sera nécessaire de coder un destructeur
~Client()
afin de libérer l'espace mémoire occupé par les comptes crées, lors de la destruction de l'instance deClient
. - Ajouter une méthode
Compte* get_compte(int _num)
qui renvoie un pointeur vers le compte de numéro_num
- Ajouter une méthode
enlever_compte(Compte* c)
qui enlèvera un compte de la liste des comptes du client (attention : le compte bancaire existe encore pour la banque). - Ajouter une méthode
solder_compte(Compte* c)
qui solde un compte (ie : le compte bancaire n'existe plus pour la banque). - Ajouter une méthode
migrer(Compte* c, Client* cl)
qui transfère un compte vers un autre client.
- Modifier l'implémentation de la méthode
- Voici un exemple de programme que l'on souhaite pouvoir executer :
int main() {
Client cl1("Toto");
Client cl2("Titi");
cl1.add_compte(1000); // crée un compte pour Toto
cl1.add_compte(1001); // crée un second compte pour Toto
cl1.get_compte(1000)->depot(100); // effectue un dépôt sur le premier compte de Toto
cout << cl1.to_string() << endl; // affiche la situation bancaire de Toto
cl1.migrer(cl1.get_compte(1000), &cl2); // transfère le compte n°1000 de Toto vers Titi
cout << cl1.to_string() << endl;
cout << cl2.to_string() << endl;
return 0;
}