Exercices corrigés C++ – Programmation Orientée Objet | Partie 1

Avec des exercices corrigés en C++, vous pratiquerez divers concepts du langage C++. Vous commencerez par des exercices C++ de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
 
 

Exercice 1:

Écrivez un programme C++ pour créer une classe appelée « Personne » avec un nom et un attribut age. Créez deux instances de la classe « Personne », définissez leurs attributs à l’aide du constructeur et affichez leur nom et leur âge.

Exemple de sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Diagrame de classe:

Solution:

#include <iostream>
#include <string>

using namespace std;

// Définir la classe Personne
class Person {
    // Déclarer des variables privées pour stocker le nom et l'âge de 
    // la personne
    private:
        string name; // Nom
        int age;     // Âge

    // Constructeur de la classe Personne qui initialise les 
    // variables
    public:
        Person(string name, int age) {
            // Attribuer à la variable name la valeur du paramètre 
            // name fourni
            this->name = name;
            // Attribuer à la variable age la valeur du paramètre age
            this->age = age;
        }

        // Méthode pour récupérer le nom de la personne
        string getName() {
            // Retourner la valeur de la variable name
            return name;
        }

        // Méthode pour récupérer l'âge de la personne
        int getAge() {
            // Retourner la valeur de la variable age
            return age;
        }

        // Méthode pour définir le nom de la personne
        void setName(string name) {
            // Attribuer à la variable name la valeur du paramètre 
            // name fourni
            this->name = name;
        }

        // Méthode pour définir l'âge de la personne
        void setAge(int age) {
            // Attribuer à la variable age la valeur du paramètre age
            this->age = age;
        }
};

// Définir la fonction main
int main() {
    // Créer une instance de la classe Personne avec le nom 'Alex 
    // Babtise' et l'âge 25
    Person p1("Alex Babtise", 25);
    // Créer une autre instance de la classe Personne avec le nom 
    // "Emily Tonari" et l'âge 18
    Person p2("Emily Tonari", 18);

    // Afficher le nom et l'âge de p1 sur la console
    cout << p1.getName() << " a " << p1.getAge() << " ans." << endl;
    // Afficher le nom et l'âge de p2 sur la console
    cout << p2.getName() << " a " << p2.getAge() << " ans." << endl;

    // Modifier le nom et l'âge de p2 en utilisant les méthodes 
    // setter
    p2.setName("Thomas Gozilla");
    p2.setAge(30);

    // Afficher le nom et l'âge actualisés de p2 sur la console
    cout << p2.getName() << " a " << p2.getAge() << " ans." << endl;

    return 0; // Fin du programme
}

Sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Thomas Gozilla a 30 ans.

Explication:

Dans l'exemple ci-dessus, nous créons deux instances de la classe « Personne », nous définissons leurs attributs à l'aide du constructeur et nous affichons leur nom et leur âge à l'aide des méthodes getter. Nous modifions également les attributs à l'aide des méthodes setter et affichons les valeurs mises à jour.

 

Exercice 2:

Écrivez un programme C++ pour créer une classe appelée « Chien » avec un nom et un attribut de race. Créez deux instances de la classe « Chien », définissez leurs attributs à l'aide du constructeur et modifiez les attributs à l'aide des méthodes setter, puis affichez les valeurs mises à jour.

Diagrame de classe:

Solution:

#include <iostream>
#include <string>

using namespace std;

// Définir la classe Chien
class Chien {
    // Déclarer des variables privées pour stocker le nom et la race
    // du Chien
    private:
        string nom; // Nom
        string race; // Race

    // Constructeur de la classe Chien qui initialise les variables 
    // nom et race
    public:
        Chien(string nom, string race) {
            // Attribuer à la variable nom la valeur du paramètre nom
            this->nom = nom;
            // Attribuer à la variable race la valeur du paramètre 
            // race fourni
            this->race = race;
        }

        // Méthode pour récupérer le nom du Chien
        string getNom() {
            // Retourner la valeur de la variable nom
            return nom;
        }

        // Méthode pour définir le nom du Chien
        void setNom(string nom) {
            // Attribuer à la variable nom la valeur du paramètre nom
            this->nom = nom;
        }

        // Méthode pour récupérer la race du Chien
        string getRace() {
            // Retourner la valeur de la variable race
            return race;
        }

        // Méthode pour définir la race du Chien
        void setRace(string race) {
            // Attribuer à la variable race la valeur du paramètre 
            // race fourni
            this->race = race;
        }
};

// Définir la fpnction main
int main() {
    // Créer une instance de la classe Chien avec le nom 'Rio' et la 
    // race 'Berger allemand'
    Chien ch1("Rio", "Berger allemand");
    // Créer une autre instance de la classe Chien avec le nom 
    // 'Rocky' et la race 'Husky'
    Chien ch2("Rocky", "Husky");

    // Afficher le nom et la race de ch1 sur la console
    cout << ch1.getNom() << " est un " << ch1.getRace() << endl;
    // Afficher le nom et la race de ch2 sur la console
    cout << ch2.getNom() << " est un " << ch2.getRace() << endl;

    // Afficher un message indiquant que la race de ch1 et le nom de 
    // ch2 vont être modifiés
    cout << "\nDéfinir la nouvelle race de ch1 et le nouveau nom de ch2:" << endl;

    // Changer la race du ch1 en "Beagle"
    ch1.setRace("Beagle");
    // Changer le nom de ch2 en "Simba"
    ch2.setNom("Simba");

    // Afficher sur la console le nom et la race mis à jour de ch1
    cout << ch1.getNom() << " est un " << ch1.getRace() << endl;
    // Afficher sur la console le nom et la race mis à jour de ch2
    cout << ch2.getNom() << " est un " << ch2.getRace() << endl;

    return 0; // Fin du programme
}

Sortie:

Rio est un Berger allemand
Rocky est un Husky

Définir la nouvelle race de ch1 et le nouveau nom de ch2:
Rio est un Beagle
Simba est un Husky
 

Exercice 3:

Écrire un programme C++ pour créer une classe appelée « Livre » avec des attributs pour le titre, l'auteur et l'ISBN, et des méthodes pour ajouter et supprimer des livres d'une collection.

Diagrame de classe:

Solution:

#include <iostream>
#include <string>

using namespace std;

// Définir la classe Livre
class Livre {
private:
    string titre; // Titre
    string auteur; // Auteur
    string ISBN; // ISBN

public:
    // Constructeur
    Livre(string titre, string auteur, string ISBN) 
        : titre(titre), auteur(auteur), ISBN(ISBN) {}

    // Méthodes pour obtenir les attributs
    string getTitre() { return titre; }
    string getAuteur() { return auteur; }
    string getISBN() { return ISBN; }

    // Méthodes pour définir les attributs
    void setTitre(string titre) { this->titre = titre; }
    void setAuteur(string auteur) { this->auteur = auteur; }
    void setISBN(string ISBN) { this->ISBN = ISBN; }

    // Afficher les informations du livre
    void afficher() const {
        cout<< titre <<" par "<< auteur <<", ISBN: "<< ISBN <<endl;
    }
};

// Classe pour gérer la collection de livres
class Bibliotheque {
private:
    static const int MAX_LIVRES = 100; // Taille maximum du tableau
    Livre* livres[MAX_LIVRES]; // Tableau de livres
    int nombreLivres; // Compteur de livres

public:
    // Initialiser le compteur à 0
    Bibliotheque() : nombreLivres(0) {} 

    // Méthode pour ajouter un livre
    void ajouterLivre(Livre* livre) {
        if (nombreLivres < MAX_LIVRES) {
            // Ajouter le livre et incrémenter le compteur
            livres[nombreLivres++] = livre; 
        } else {
            cout << "Bibliothèque pleine, impossible d'ajouter le livre." << endl;
        }
    }

    // Méthode pour supprimer un livre
    void supprimerLivre(string ISBN) {
        for (int i = 0; i < nombreLivres; ++i) {
            if (livres[i]->getISBN() == ISBN) {
                delete livres[i]; // Libérer la mémoire
                for (int j = i; j < nombreLivres - 1; ++j) {
                    livres[j] = livres[j + 1]; // Décaler les livres
                }
                --nombreLivres; // Décrémenter le compteur
                break; // Sortir de la boucle après suppression
            }
        }
    }

    // Méthode pour afficher tous les livres
    void afficherLivres() {
        cout << "Liste des livres:" << endl;
        for (int i = 0; i < nombreLivres; ++i) {
            livres[i]->afficher(); // Afficher chaque livre
        }
    }

    ~Bibliotheque() { // Destructeur pour libérer la mémoire
        for (int i = 0; i < nombreLivres; ++i) {
            delete livres[i]; // Libérer chaque livre
        }
    }
};

// Fonction principale
int main() {
    Bibliotheque biblio;

    // Créer des livres dynamiquement
    Livre* livre1 = new Livre("L'Étranger", "Albert Camus", "6547165001881");
    Livre* livre2 = new Livre("Le père Goriot", "Honoré de Balzac", "661100321741");

    // Ajouter les livres à la bibliothèque
    biblio.ajouterLivre(livre1);
    biblio.ajouterLivre(livre2);

    // Afficher la liste des livres
    biblio.afficherLivres();

    // Supprimer un livre par son ISBN
    biblio.supprimerLivre("6547165001881");

    // Afficher la liste mise à jour des livres
    cout << "\nAprès suppression de L'Étranger:" << endl;
    biblio.afficherLivres();

    return 0; // Fin du programme
}

Sortie:

Liste des livres:
L'Étranger par Albert Camus, ISBN: 6547165001881
Le père Goriot par Honoré de Balzac, ISBN: 661100321741

Après suppression de L'Étranger:
Liste des livres mise à jour:
Le père Goriot par Honoré de Balzac, ISBN: 661100321741
 

Exercice 4:

Écrire un programme C++ pour créer une classe appelée « Employee » avec un nom, un poste et un salaire, ainsi que des méthodes pour calculer et mettre à jour le salaire.

Diagrame de classe:

Solution:

#include <iostream>
#include <string>

using namespace std;

// Définir la classe Employee
class Employee {
private:
    // Déclarer une variable privée pour stocker le nom de l'employé
    string nom;
    // Déclarer une variable privée pour stocker le poste de l'emp    
    string poste;  
    // Déclarer une variable privée pour stocker le salaire de l'emp
    double salaire; 

public:
    // Constructeur de la classe Employee qui initialise les 
    // variables nom, poste et salaire
    Employee(string nom, string poste, double salaire) {
        // Attribue à la variable nom la valeur du paramètre nom
        this->nom = nom;       
        // Attribue à la variable poste la valeur du paramètre poste
        this->poste = poste;    
        // Attribue à la variable salaire la valeur du paramètre 
        // salaire fourni
        this->salaire = salaire; 
    }

    // Méthode pour récupérer le nom de l'employé
    string getNom() {
        return nom; // Retourner la valeur de la variable nom
    }

    // Méthode pour définir le nom de l'employé
    void setNom(string nom) {
        // Attribue à la variable nom la valeur du paramètre nom
        this->nom = nom; 
    }

    // Méthode pour récupérer le poste de l'employé
    string getPoste() {
        // Retourner la valeur de la variable poste
        return poste; 
    }

    // Méthode pour définir le poste de l'employé
    void setPoste(string poste) {
        // Attribue à la variable poste la valeur du paramètre poste
        this->poste = poste; 
    }

    // Méthode pour récupérer le salaire de l'employé
    double getSalaire() {
        // Retourner la valeur de la variable salaire
        return salaire; 
    }

    // Méthode pour définir le salaire de l'employé
    void setSalaire(double salaire) {
        // Attribue à la variable salaire la valeur du paramètre 
        // salaire fourni
        this->salaire = salaire; 
    }

    // Méthode pour augmenter le salaire de l'employé d'un 
    // pourcentage donné
    void augSalaire(double pourcentage) {
        // Calculer le nouveau salaire en augmentant le salaire 
        // actuel du pourcentage donné
        salaire += salaire * pourcentage / 100;
    }

    // Méthode pour afficher les détails de l'employé
    void afficherEmployee() {
        // Afficher le nom de l'employé
        cout << "Nom: " << nom << endl;  
        // Afficher le poste de l'employé		
        cout << "Poste: " << poste << endl;  
        // Afficher le salaire de l'employé
        cout << "Salaire: " << salaire << endl; 
    }
};

// Définir la fonction Main
int main() {
    // Créer une instance de la classe Employee
    Employee e1("Alex Babtise", "Développeur", 80000);
    // Créer une autre instance de la classe Employee
    Employee e2("Emily Firoza", "Comptable", 70000);

    cout << "\nDétails de l'employé:" << endl;
    // Afficher les détails de e1
    e1.afficherEmployee();
    // Afficher les détails de e2
    e2.afficherEmployee();

    // Augmenter le salaire de e1 de 5%
    e1.augSalaire(5);
    // Augmenter le salaire de e2 de 10%
    e2.augSalaire(10);

    cout << "\nAprès l'augmentation des salaires:" << endl;
    cout << "\n5% pour 'Alex Babtise':" << endl;
    // Afficher les données mises à jour de e1
    e1.afficherEmployee();
    cout << "\n10% pour 'Emily Firoza':" << endl;
    // Afficher les données mises à jour de e2
    e2.afficherEmployee();

    return 0; // Fin du programme
}

Sortie:

Détails de l'employé:
Nom: Alex Babtise
Poste: Développeur
Salaire: 80000.0
Nom: Emily Firoza
Poste: Comptable
Salaire: 70000.0

Après l'augmentation des salaires:

5% pour 'Alex Babtise':
Nom: Alex Babtise
Poste: Développeur
Salaire: 84000.0

10% pour 'Emily Firoza':
Nom: Emily Firoza
Poste: Comptable
Salaire: 77000.0
 

Exercice 5:

Écrivez un programme C++ pour créer une classe appelée « Banque » avec une collection de comptes et des méthodes pour ajouter et supprimer des comptes, et pour déposer et retirer de l'argent. Définissez également une classe appelée « Compte » pour gérer les détails du compte d'un client particulier.

Diagrame de classe:


Solution:

#include <iostream>
#include <string>

using namespace std;

// Définir la classe Compte
class Compte {
private:
    string nom;        // Nom du titulaire du compte
    string numCompte;  // Numéro de compte
    double solde;      // Solde du compte

public:
    // Constructeur de la classe Compte
    Compte(string nom, string numCompte, double solde) {
        this->nom = nom;
        this->numCompte = numCompte;
        this->solde = solde;
    }

    // Méthode pour récupérer le nom du titulaire du compte
    string getNom() { return nom; }

    // Méthode pour définir le nom du titulaire du compte
    void setNom(string nom) { this->nom = nom; }

    // Méthode pour récupérer le numéro de compte
    string getNumCompte() { return numCompte; }

    // Méthode pour définir le numéro de compte
    void setNumCompte(string numCompte) {this->numCompte = numCompte;}

    // Méthode pour récupérer le solde du compte
    double getSolde() { return solde; }

    // Méthode pour définir le solde du compte
    void setSolde(double solde) { this->solde = solde; }

    // Méthode de dépôt d'un montant sur le compte
    void deposer(double montant) { solde += montant; }

    // Méthode de retrait d'un montant du compte
    void retirer(double montant) { solde -= montant; }

    // Méthode pour récupérer les informations sur le compte
    string getCompteInfo() {
        return "Nom: "+ nom +", Numéro de compte: "+ numCompte +", Solde: "+ to_string(solde);
    }
};

// Définir la classe Banque
class Banque {
private:
    Compte* comptes[100]; // Tableau pour stocker les comptes
    int count;            // Compteur de comptes

public:
    // Constructeur de la classe Banque
    Banque() {
        count = 0;  // Initialiser le compteur de comptes
    }

    // Méthode pour ajouter un compte à la liste des comptes
    void addCompte(Compte* compte) {
        comptes[count++] = compte;  // Ajouter le compte
    }

    // Méthode pour supprimer un compte de la liste des comptes
    void removeCompte(Compte* compte) {
        // Implémentation simple pour l'exemple
        for (int i = 0; i < count; i++) {
            if (comptes[i] == compte) {
                for (int j = i; j < count - 1; j++) {
                    // Déplacer les éléments
                    comptes[j] = comptes[j + 1];  
                }
                count--;  // Réduire le compteur
                break;
            }
        }
    }

    // Méthode pour déposer de l'argent sur un compte spécifique
    void deposerArgent(Compte* compte, double montant) {
        compte->deposer(montant);
    }

    // Méthode pour retirer de l'argent d'un compte spécifique
    void retirerArgent(Compte* compte, double montant) {
        compte->retirer(montant);
    }

    // Méthode pour obtenir la liste de tous les comptes
    Compte** getComptes() { return comptes; }
    int getCount() { return count; } //Récupérer le nombre de comptes
};

// Définir la fonction main
int main() {
    // Créer un nouvel objet Banque
    Banque b;

    // Créer trois nouveaux objets Compte
    Compte* cpt1 = new Compte("Alex Babtise", "C101", 8000);
    Compte* cpt2 = new Compte("Ali Koris", "C102", 6500);
    Compte* cpt3 = new Compte("Bob Finor", "C103", 50000);

    // Ajouter les trois comptes au Banque b
    b.addCompte(cpt1);
    b.addCompte(cpt2);
    b.addCompte(cpt3);

    // Récupérer la liste des comptes de la Banque b
    cout << "Liste des comptes:" << endl;
    for (int i = 0; i < b.getCount(); i++) {
        cout << b.getComptes()[i]->getCompteInfo() << endl;
    }

    // Afficher un message indiquant le début d'une opération de 
    // dépôt
    cout << "\nAprès avoir déposé 500 dans cpt1:" << endl;
    b.deposerArgent(cpt1, 500);
    cout << cpt1->getCompteInfo() << endl;

    // Afficher un message indiquant qu'il n'y a pas de transaction 
    // pour cpt2
    cout << "Pas de transaction dans cpt2:" << endl;
    cout << cpt2->getCompteInfo() << endl;

    // Afficher un message indiquant le début d'une opération de 
    // retrait
    cout << "Après avoir retiré 2000 de cpt3 :" << endl;
    b.retirerArgent(cpt3, 2000);
    cout << cpt3->getCompteInfo() << endl;

    // Libérer la mémoire
    delete cpt1;
    delete cpt2;
    delete cpt3;

    return 0;
}

Sortie:

Nom: Alex Babtise, Numéro de compte: C101, Solde: 8000.0
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Nom: Bob Finor, Numéro de compte: C103, Solde: 50000.0

Après avoir déposé 500 dans cpt1:
Nom: Alex Babtise, Numéro de compte: C101, Solde: 8500.0
Pas de transaction dans cpt2:
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Après avoir retiré 2000 de cpt3 :
Nom: Bob Finor, Numéro de compte: C103, Solde: 48000.0
 

Éditeur de code C++: Testez votre code en ligne!

QCM C++

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *