Cours:PooTD pointeurs

De troyesGEII
Révision datée du 24 septembre 2021 à 09:18 par Fredmn (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

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 de Client.
    • 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.
  • 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;
}