Exercices corrigés C++ – Programmation Orientée Objet | Partie 2
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 « FeuDeCirculation » avec des attributs pour la couleur et la durée, et des méthodes pour changer la couleur et vérifier si le feu est rouge ou vert.
Diagrame de classe:

#include <iostream>
#include <string>
using namespace std;
// Définir la classe FeuDeCirculation
class FeuDeCirculation {
private:
// Déclarer une variable privée pour stocker la couleur du feu de
// circulation
string couleur;
// Déclarer une variable privée pour stocker la durée du feu en
// secondes
int duree;
public:
// Constructeur pour la classe FeuDeCirculation
FeuDeCirculation(string couleur, int duree) {
// Initialiser la couleur du feu de circulation
this->couleur = couleur;
// Initialiser la durée du feu de circulation
this->duree = duree;
}
// Méthode pour changer la couleur du feu de circulation
void changerCouleur(string newColor) {
// Mettre à jour la variable couleur avec la nouvelle couleur
couleur = newColor;
}
// Méthode pour vérifier si le feu est rouge
bool estRouge() {
// Retourne true si la couleur est rouge, sinon retourne
// false
return couleur == "Rouge";
}
// Méthode pour vérifier si le feu est vert
bool estVert() {
// Retourne true si la couleur est verte, sinon retourne
// false
return couleur == "Vert";
}
// Méthode pour obtenir la durée du feu de circulation
int getDuree() {
// Renvoyer la valeur de la durée
return duree;
}
// Méthode pour définir la durée du feu de circulation
void setDuree(int duree) {
// Mettre à jour la variable durée avec la nouvelle valeur
this->duree = duree;
}
};
// Définir la fonction Main
int main() {
// Créer un nouvel objet FeuDeCirculation avec une couleur
// initiale 'Rouge' et une durée de 30 secondes.
FeuDeCirculation fc("Rouge", 30);
// Afficher si le feu est rouge
cout << "Le feu est rouge: " << (fc.estRouge() ? "true" : "false") << endl;
// Afficher si le feu est vert
cout << "Le feu est vert: " << (fc.estVert() ? "true" : "false") << endl;
// Changer la couleur du feu de circulation en 'Vert'
fc.changerCouleur("Vert");
// Afficher si le feu de circulation est maintenant vert
cout << "Le feu de circulation est maintenant vert: " << (fc.estVert() ? "true" : "false") << endl;
// Afficher la durée du feu de circulation
cout << "La durée du feu est: " << fc.getDuree() << " secondes" << endl;
// Définir une nouvelle durée pour le feu de circulation à 15
// secondes
fc.setDuree(15);
// Afficher la durée actualisée du feu de circulation
cout << "La durée du feu est maintenant: " << fc.getDuree() << " secondes" << endl;
return 0;
}
Sortie:
Le feu est rouge: true Le feu est vert: false Le feu de circulation est maintenant vert: true La durée du feu est: 30 La durée du feu est maintenant: 15
Exercice 2:
Écrire un programme C++ pour créer une classe appelée « Employee » avec un nom, un salaire, une date d'embauche et une méthode pour calculer les années de service.
Diagrame de classe:

#include <iostream>
#include <string>
#include <chrono>
#include <ctime>
class Employee {
private:
// Variable privée pour stocker le nom de l'employé
std::string nom;
// Variable privée pour stocker le salaire de l'employé
double salaire;
// Variable privée pour stocker la date d'embauche
std::time_t datEmbauche;
public:
// Constructeur de la classe Employee
Employee(const std::string& nom, double salaire, const std::string& dateStr) {
// Initialiser le nom de l'employé
this->nom = nom;
// Initialiser le salaire de l'employé
this->salaire = salaire;
// Convertir la date sous forme de chaîne en std::time_t
// Créer une structure tm pour stocker les éléments de la
// date
std::tm tm = {};
// Parser la date
strptime(dateStr.c_str(), "%Y-%m-%d", &tm);
// Convertir en std::time_t
datEmbauche = std::mktime(&tm);
}
// Méthode pour récupérer le nom de l'employé
std::string getNom() {
return nom; // Retourner le nom
}
// Méthode pour définir le nom de l'employé
void setNom(const std::string& nom) {
this->nom = nom; // Mettre à jour le nom
}
// Méthode pour récupérer le salaire de l'employé
double getSalaire() {
return salaire; // Retourner le salaire
}
// Méthode pour définir le salaire de l'employé
void setSalaire(double salaire) {
this->salaire = salaire; // Mettre à jour le salaire
}
// Méthode pour récupérer la date d'embauche de l'employé
std::time_t getDatEmbauche() {
return datEmbauche; // Retourner la date d'embauche
}
// Méthode pour définir la date d'embauche de l'employé
void setDatEmbauche(const std::string& dateStr) {
// Créer une structure tm pour stocker les éléments de la
// date
std::tm tm = {};
// Parser la date
strptime(dateStr.c_str(), "%Y-%m-%d", &tm);
// Convertir en std::time_t
datEmbauche = std::mktime(&tm);
}
// Méthode pour calculer les années de service de l'employé
int calculerAnneeService() {
// Obtenir l'heure actuelle
auto now = std::time(nullptr);
// Calculer la différence en années entre la date actuelle et
// la date d'embauche
return std::difftime(now, datEmbauche) / (365 * 24 * 60 * 60);
}
// Méthode pour afficher les détails de l'employé
void afficherEmployee() {
// Afficher le nom
std::cout << "\nNom: " << nom;
// Afficher le salaire
std::cout << "\nSalaire: " << salaire;
// Afficher la date d'embauche
std::cout <<"\nDate d'embauche: "<< std::ctime(&datEmbauche);
}
};
int main() {
// Créer un nouvel objet Employee nommé emp1
Employee emp1("Alex Babtise", 80000, "2024-05-01");
// Créer un nouvel objet Employee nommé emp2
Employee emp2("Bob Kimo", 40000, "2022-03-01");
// Afficher les détails de l'employé 1
emp1.afficherEmployee();
// Afficher les années de service de l'employé 1
std::cout << "Années de service: " << emp1.calculerAnneeService() << std::endl;
// Afficher les détails de l'employé 2
emp2.afficherEmployee();
// Afficher les années de service de l'employé 2
std::cout << "Années de service: " << emp2.calculerAnneeService() << std::endl;
return 0; // Fin du programme
}
Sortie:
Nom: Alex Babtise Salaire: 80000.0 Date d'embauche: 2024-05-01 Années de service: 0 Nom: Bob Kimo Salaire: 40000.0 Date d'embauche: 2022-03-01 Années de service: 2
Exercice 3:
Écrire un programme C++ pour créer une classe appelée « Etudiant » avec un nom, une note et des cours, ainsi que des méthodes pour ajouter et supprimer des cours.
Diagrame de classe:

#include <iostream>
#include <string>
// Définir la classe Etudiant
class Etudiant {
private:
// Déclarer une variable privée pour stocker le nom de l'étudiant
std::string nom;
// Déclarer une variable privée pour stocker la note de l'étud..
int note;
// Déclarer un tableau fixe pour stocker les cours de l'étudiant
std::string cours[10]; // Capacité maximale de 10 cours
int nbCours; // Compteur pour le nombre de cours
public:
// Constructeur pour la classe Etudiant
Etudiant(const std::string& nom, int note) {
// Initialiser le nom de l'étudiant
this->nom = nom;
// Initialiser la note de l'étudiant
this->note = note;
// Initialiser le compteur de cours
nbCours = 0;
}
// Méthode pour récupérer le nom de l'étudiant
std::string getNom() {
// Retourner le nom de l'étudiant
return nom;
}
// Méthode pour récupérer la note de l'étudiant
int getNote() {
// Retourner la note de l'étudiant
return note;
}
// Méthode pour récupérer la liste de cours de l'étudiant
std::string* getCours() {
// Retourner le tableau de cours
return cours;
}
// Méthode pour ajouter un cours à la liste des cours de l'étud..
void ajouterCours(const std::string& c) {
// Vérifier si l'on peut ajouter un cours
if (nbCours < 10) {
cours[nbCours] = c; // Ajouter le cours
nbCours++; // Incrémenter le compteur
} else {
std::cout << "Impossible d'ajouter le cours. Limite atteinte." << std::endl;
}
}
// Méthode pour supprimer un cours de la liste des cours de l'étu
void supprimerCours(const std::string& c) {
// Chercher le cours dans le tableau
for (int i = 0; i < nbCours; i++) {
if (cours[i] == c) {
// Déplacer les cours restants vers la gauche
for (int j = i; j < nbCours - 1; j++) {
cours[j] = cours[j + 1];
}
nbCours--; // Décrémenter le compteur de cours
break;
}
}
}
// Méthode pour afficher les détails de l'étudiant
void afficherEtudiant() {
// Afficher le nom de l'étudiant
std::cout << "Nom: " << nom << std::endl;
// Afficher la note de l'étudiant
std::cout << "Note: " << note << std::endl;
}
// Méthode pour afficher les cours de l'étudiant
void afficherCours() {
std::cout << "Les cours de " << nom << " : ";
for (int i = 0; i < nbCours; i++) {
// Ajouter une virgule sauf pour le dernier
std::cout << cours[i] << (i < nbCours - 1 ? ", " : "");
}
std::cout << std::endl;
}
};
// Définir la fonction Main
int main() {
// Créer un nouvel objet Etudiant nommé e1
Etudiant e1("Alex Babtise", 18);
// Créer un nouvel objet Etudiant nommé e2
Etudiant e2("Bob Kimo", 16);
// Afficher un en-tête pour les détails de l'étudiant
std::cout << "Détails de l'étudiant:" << std::endl;
// Afficher les données de l'étudiant 1
e1.afficherEtudiant();
// Afficher les données de l'étudiant 2
e2.afficherEtudiant();
// Afficher un message indiquant que des cours sont ajoutés pour
// l'étudiant 1
std::cout<<"Ajouter des cours pour "<<e1.getNom()<<std::endl;
e1.ajouterCours("Mathématiques");
e1.ajouterCours("Biologie");
e1.ajouterCours("Histoire");
// Afficher les cours de e1
e1.afficherCours();
// Afficher un message indiquant que des cours sont ajoutés pour
// l'étudiant 2
std::cout<<"\nAjouter des cours pour "<<e2.getNom()<<std::endl;
e2.ajouterCours("Anglais");
e2.ajouterCours("Géologie");
e2.ajouterCours("Physique");
// Afficher les cours de e2
e2.afficherCours();
// Afficher un message indiquant que le cours 'Biologie' est
// supprimé pour e1
std::cout << "\nSuppression du cours 'Biologie' pour " << e1.getNom() << std::endl;
// Supprimer le cours 'Biologie' des cours de e1
e1.supprimerCours("Biologie");
// Afficher les cours de e1 après suppression
e1.afficherCours();
return 0;
}
Sortie:
Détails de l'étudiant: Nom: Alex Babtise Note: 18 Nom: Bob Kimo Note: 16 Ajouter des cours pour Alex Babtise Les cours de Alex Babtise : [Mathématiques, Biologie, Histoire] Ajouter des cours pour Bob Kimo Les cours de Bob Kimo : [Anglais, Géologie, Physique] Suppression du cours 'Biologie' pour Alex Babtise Les cours de Alex Babtise : [Mathématiques, Histoire]
Exercice 4:
Écrire un programme C++ pour créer une classe appelée « Bibliotheque » avec une collection de livres et des méthodes pour ajouter et supprimer des livres.
Diagrame de classe:

#include <iostream>
#include <string>
// Capacité maximale de livres
const int MAX_LIVRES = 100;
// Définir la classe Livre
class Livre {
private:
// Attributs privés pour stocker le titre et l'auteur
std::string titre;
std::string auteur;
public:
// Constructeur pour initialiser les champs titre et auteur
Livre(std::string titre, std::string auteur) {
// Attribuer le paramètre titre
this->titre = titre;
// Attribuer le paramètre auteur
this->auteur = auteur;
}
// Méthode pour récupérer le titre
std::string getTitre() {
// Retourner le titre
return titre;
}
// Méthode Setter pour le titre
void setTitre(std::string titre) {
// Attribuer le nouveau titre
this->titre = titre;
}
// Méthode pour récupérer l'auteur
std::string getAuteur() {
return auteur; // Retourner l'auteur
}
// Méthode Setter pour l'auteur
void setAuteur(std::string auteur) {
// Attribuer le nouvel auteur
this->auteur = auteur;
}
};
// Définir la classe Bibliotheque
class Bibliotheque {
private:
// Tableau pour stocker les objets Livre
Livre* livres[MAX_LIVRES];
// Compteur pour le nombre de livres
int count;
public:
// Constructeur pour initialiser la bibliothèque
Bibliotheque() {
// Initialiser le compteur de livres à zéro
count = 0;
}
// Méthode pour ajouter un livre à la bibliothèque
void addLivre(Livre* livre) {
// Vérifier si on peut ajouter un livre
if (count < MAX_LIVRES) {
// Ajouter le livre et incrémenter le compteur
livres[count++] = livre;
}
}
// Méthode pour supprimer un livre de la bibliothèque
void removeLivre(Livre* livre) {
for (int i = 0; i < count; ++i) {
// Vérifier si le livre est dans le tableau
if (livres[i] == livre) {
for (int j = i; j < count - 1; ++j) {
// Déplacer les livres vers la gauche
livres[j] = livres[j + 1];
}
--count; // Décrémenter le compteur
break; // Sortir de la boucle
}
}
}
// Méthode pour récupérer la liste des livres
Livre** getLivres() {
return livres; // Retourner le tableau des livres
}
// Méthode pour récupérer le nombre de livres
int getCount() {
return count; // Retourner le nombre de livres
}
};
// Définir la fonction Main
int main() {
// Créer une nouvelle instance de la classe Bibliotheque
Bibliotheque biblio;
// Créer de nouveaux objets Livre avec le titre et l'auteur
Livre* livre1 = new Livre("Les Misérables", "Victor Hugo");
Livre* livre2 = new Livre("Nana", "Émile Zola");
Livre* livre3 = new Livre("Les fleurs du mal", "Baudelaire");
Livre* livre4 = new Livre("Le Cid", "Corneille");
// Ajouter les livres à la bibliothèque
biblio.addLivre(livre1);
biblio.addLivre(livre2);
biblio.addLivre(livre3);
biblio.addLivre(livre4);
std::cout << "Livres dans la bibliothèque:" << std::endl;
// Parcourir la liste des livres de la bibliothèque
for (int i = 0; i < biblio.getCount(); ++i) {
// Afficher titre et auteur
std::cout << biblio.getLivres()[i]->getTitre() << " par "
<< biblio.getLivres()[i]->getAuteur() << std::endl;
}
// Supprimer un livre de la bibliothèque
biblio.removeLivre(livre2);
std::cout<<"\nLivres dans la bibliothèque après suppression de "
<< livre2->getTitre() << ":" << std::endl;
// Parcourir la liste mise à jour des livres
for (int i = 0; i < biblio.getCount(); ++i) {
// Afficher titre et auteur
std::cout << biblio.getLivres()[i]->getTitre() << " par "
<< biblio.getLivres()[i]->getAuteur() << std::endl;
}
// Libérer la mémoire
delete livre1;
delete livre2;
delete livre3;
delete livre4;
return 0; // Fin du programme
}
Sortie:
Livres dans la bibliothéque: Les Misérables par Victor Hugo Nana par Émile Zola Les fleurs du mal par Baudelaire Le Cid par Corneille Livres dans la biblio après suppression Nana: Les Misérables par Victor Hugo Les fleurs du mal par Baudelaire Le Cid par Corneille
Exercice 5:
Écrire un programme C++ pour créer une classe appelée « Avion » avec un numéro de vol, une destination et des attributs d'heure de départ, ainsi que des méthodes pour vérifier l'état et le retard du vol.
Diagrame de classe:

#include <iostream>
#include <string>
#include <iomanip> // Pour std::setfill et std::setw
#include <ctime> // Pour struct tm et mktime
// Définir la classe Avion
class Avion {
private:
// Attribut privé pour stocker le numéro de vol
std::string numVol;
// Attribut privé pour stocker la destination
std::string destination;
// Attribut privé pour stocker l'heure de départ prévue
std::tm heureDepart;
// Attribut privé pour stocker le temps de retard en minutes
int tempsRetard;
public:
// Constructeur pour initialiser le numéro de vol, la destination
// et l'heure de départ prévue
Avion(std::string numVol, std::string destination, std::tm heureDepart) {
// Attribuer le paramètre numVol au champ numVol
this->numVol = numVol;
// Attribuer le paramètre destination au champ destination
this->destination = destination;
// Attribuer le paramètre heureDepart au champ heureDepart
this->heureDepart = heureDepart;
// Initialiser le temps de retard à 0
this->tempsRetard = 0;
}
// Méthode pour obtenir le numéro de vol
std::string getNumVol() {
// Retourner la valeur du champ numVol
return numVol;
}
// Méthode pour définir le numéro de vol
void setNumVol(std::string numVol) {
// Attribuer le paramètre numVol au champ numVol
this->numVol = numVol;
}
// Méthode pour obtenir la destination
std::string getDestination() {
// Retourner la valeur du champ destination
return destination;
}
// Méthode pour définir la destination
void setDestination(std::string destination) {
// Attribuer le paramètre destination au champ destination
this->destination = destination;
}
// Méthode pour obtenir l'heure de départ
std::tm getHeureDepart() {
// Retourner la valeur du champ heureDepart
return heureDepart;
}
// Méthode pour définir l'heure de départ
void setHeureDepart(std::tm heureDepart) {
// Attribuer le paramètre heureDepart au champ heureDepart
this->heureDepart = heureDepart;
}
// Méthode pour obtenir le temps de retard
int getTempsRetard() {
// Retourner la valeur du champ tempsRetard
return tempsRetard;
}
// Méthode pour retarder le vol et mettre à jour l'heure de
// départ prévue
void retarder(int minutes) {
// Affecter le paramètre minutes au champ tempsRetard
this->tempsRetard += minutes;
// Ajouter le temps de retard à l'heure de départ
heureDepart.tm_min += minutes;
// Normaliser l'heure si nécessaire
mktime(&heureDepart);
}
// Méthode pour vérifier le statut du vol
void checkStatutVol() {
// Vérifier s'il n'y a pas de retard
if (tempsRetard == 0) {
// Afficher un message indiquant que le vol est à l'heure
std::cout << "Le vol " << numVol << " est à l'heure." << std::endl;
} else {
// Afficher un message indiquant que le vol est retardé
std::cout << "Le vol " << numVol << " est retardé de " << tempsRetard << " minutes." << std::endl;
}
}
};
// Définir la fonction Main
int main() {
// Créer un nouvel objet Avion avec le numéro de vol 'ABC123', la
// destination 'Paris' et l'heure de départ 11:30.
std::tm heure1 = {0, 30, 11, 0, 0, 0}; // 11:30
Avion a1("ABC123", "Paris", heure1);
// Créer un nouvel objet Avion avec le numéro de vol 'POM569', la
// destination 'CasaBlanca' et l'heure de départ 15:00.
std::tm heure2 = {0, 0, 15, 0, 0, 0}; // 15:00
Avion a2("POM569", "CasaBlanca", heure2);
// Créer un nouvel objet Avion avec le numéro de vol 'UYT852', la
// destination 'Bruxelles' et l'heure de départ 12:00.
std::tm heure3 = {0, 0, 12, 0, 0, 0}; // 12:00
Avion a3("UYT852", "Bruxelles", heure3);
// Afficher le statut initial du vol
std::cout << "Statut du vol:" << std::endl;
a1.checkStatutVol();
a2.checkStatutVol();
a3.checkStatutVol();
// Retarder a1 de 30 minutes
a1.retarder(30);
// Retarder a2 de 90 minutes
a2.retarder(90);
// Afficher l'état actuel du vol après les retards
std::cout << "\nStatut actuel du vol:" << std::endl;
a1.checkStatutVol();
a2.checkStatutVol();
a3.checkStatutVol();
return 0;
}
Sortie:
Statut du vol: Le vol ABC123 est à l'heure. Le vol POM569 est à l'heure. Le vol UYT852 est à l'heure. Statut actuel du vol: Le vol ABC123 est retardé de 30 minutes. Le vol POM569 est retardé de 90 minutes. Le vol UYT852 est à l'heure.
Éditeur de code C++: Testez votre code en ligne!
Exercices corrigés C++ - Programmation Orientée Objet | Partie 2
Exercices corrigés C++ - Programmation Orientée Objet | Partie 3
Exercices corrigés C++ - Programmation Orientée Objet | Partie 4
Exercices corrigés C++ - Programmation Orientée Objet | Partie 5
Exercices corrigés C++ - Programmation Orientée Objet | Partie 6
QCM sur C++ – Partie 1QCM sur C++ avec des réponses pour la préparation des concours, des tests en ligne, examens et aux certifications. Ces questions et réponses sur C++…Lire plus
- Exercice C++ Corrigé pour Débutant | Partie 1
- Exercice C++ Corrigé pour Débutant | Partie 2
- Exercice C++ Corrigé pour Débutant | Partie 3
- Exercice C++ Corrigé pour Débutant | Partie 4
- Exercice C++ Corrigé pour Débutant | Partie 5
- Exercice C++ Corrigé pour Débutant | Partie 6
- Exercice C++ Corrigé pour Débutant | Partie 7
- Exercice C++ Corrigé pour Débutant | Partie 8
- Exercice C++ Corrigé pour Débutant | Partie 9
- Exercice C++ Corrigé pour Débutant | Partie 10
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 1
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 2
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 3
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 4
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 5
- Exercices corrigés C++ – Programmation Orientée Objet | Partie 6
- Exercices corrigés C++ les classes et l’héritage – Partie 1
- Exercices corrigés C++ les classes et l’héritage – Partie 2
- Exercice C++ Corrigé – Partie 1



