Exercices et cours C++ : Classes, héritage et surcharge

Telechargé par Usama Mse
Exercice 1 :
Ecrivez un programme C++ qui contient une classe modélisant l’heure (heures, minutes et
secondes. La classe sera appelé « Time » est devra déclarer tous ses attributs comme étant
privées. De plus, elle devra contenir les méthodes publiques suivantes :
Un constructeur avec des valeurs par défaut pour chacun des attributs.
Un constructeur avec comme paramètre une chaine de caractères, qui contient l’heure
sous la forme : « hh:mm:ss ». Par exemple : "05 :38 :59".
Un constructeur par copie.
Un constructeur par déplacement .
Des getters (un pour chacun des attributs).
Des setters (un pour chacun des attributs). Le changement de valeurs doit être géré de
manière à ce que l’on puisse gérer les cas où l’utilisateur entre une valeur erronée pour
l’un des attributs (une valeur supérieur à 23 ou inférieur à 0 pour l’heure, ou une valeur
non comprise entre 0 et 59 pour les minutes et les secondes.
Une fonction amie (compare) qui permet de comparer deux objets « Time » et de
retourner un entier égal à :
o -1 si le premier objet en paramètre est le plus grand .
o 0 si les deux objets sont égaux .
o 1 si le second objet en paramètre est le plus grand .
Une méthode (changeTime) permettant d’incrémenter ou de décrémenter un objet
en secondes (seul paramètre de la méthode). L’opération doit gérer les cas de
dépassement de valeurs pour l’un des attributs de l’objet concerné. Par exemple :
Exemple 1
Exemple 2
Time t(0,26,53) ;
t.changeTime(50) ;
Time t(0,26,53) ;
t.changeTime(-56) ;
L’addition de 50 et 53 donnera 103s qui est
équivalente à 1min 43s qui doit être ajoutée à t
L’objet t devra alors avoir la valeur 00:27:43
L’addition de -56 et 53 donnera -3s qui est
équivalente à 1min 3s qui doit être
soustraite de t . L’objet t devra alors avoir la
valeur 00:25:57
Cours et exercices de l’informatique : https://coursetexercicestv.blogspot.com/
Exercice 2 :
Ecrivez un programme C++ qui contient une classe modélisant une période. Cette dernière est caractérisée par :
Un nombre d’années .
Un nombre de mois .
Un nombre de jours .
Un nombre d’heures .
Un nombre de minutes .
Un nombre de secondes .
La classe sera appelée « Periode » est devra déclarer tous ses attributs comme étant privées. De plus, elle devra
contenir les méthodes publiques suivantes :
Un constructeur avec des valeurs par défaut pour chacun des attributs .
Un constructeur par copie .
Surcharge des opérateurs « + » , « - » , « == » , « != » , « < » , « > » , « = »
Remarques :
L’opération de soustraction ne peut se faire que si la première opérande est supérieure ou égale à la seconde,
Toutes les opérations de calcul effectuées sur les périodes devront prendre en considération que :
60 secondes 1 minute
60 minutes 1 heure
24 heures 1 jour
30 jours 1 mois
12 mois 1 année
Exercice 3 :
Soit la classe Abstraite « Personne » permettant de représenter un être humain suivant les caractéristiques
suivantes :
Nom : chaine de caractères .
Prénom : chaine de caractères .
Age : nombre entier .
La classe doit aussi posséder les méthodes suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe,
Un constructeur par copie .
Getter pour chaque attribut .
Setter pour chaque attribut .
Une méthode pour afficher toutes les informations d’une personne .
Soient « Etudiant » et « Fonctionnaire » deux classes qui héritent de la classe abstraite « Personne ».
La classe « Etudiant » possède un attribut CNE de type chaine de caractères, ainsi que les méthodes suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe,
Un constructeur par copie .
Getter pour le CNE .
Setter pour le CNE .
Une méthode pour afficher toutes les informations d’une personne (redéfinition de la classe mère) .
La classe « Fonctionnaire » possède un attribut salaire de type réel, ainsi que les méthodes suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe .
Un constructeur par copie .
Getter pour le salaire .
Setter pour le salaire .
Une méthode pour afficher toutes les informations d’une personne (redéfinition de la classe mère) .
Réalisez un programme permettant d’implémenter les trois classes définies précédemment, avec une fonction
principale (main) dans laquelle vous créez des instances des classes « Etudiant » et « Fonctionnaire » et vous affichez
leurs contenus.
Correction :
Exercice 1 :
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
class Time {
private:
int heures;
int minutes;
int secondes;
public:
// Constructeurs
Time(int h = 0, int m = 0, int s = 0);
Time(char *c);
Time(const Time &t);
Time(Time &&t);
// Getters
int getHeures();
int getMinutes();
int getSecondes();
// Setters
void setHeures(int h);
void setMinutes(int m);
void setSecondes(int s);
// Fonction amie
friend int compare(const Time &t1, const Time &t2);
// Autres méthodes
void changeTime(int s);
void afficher();
};
Time::Time(int h, int m, int s){
this->heures = h;
this->minutes = m;
this->secondes = s;
}
Time::Time(char *c){
sscanf(c, "%d:%d:%d", &this->heures, &this->minutes, &this->secondes);
}
Time::Time(const Time &t){
this->heures = t.heures;
this->minutes = t.minutes;
this->secondes = t.secondes;
}
Time::Time(Time &&t){
if (this != &t){
this->heures = t.heures;
this->minutes = t.minutes;
this->secondes = t.secondes;
t.heures = 0;
t.minutes = 0;
t.secondes = 0;
}
}
int Time::getHeures(){
return this->heures;
}
int Time::getMinutes(){
return this->minutes;
}
int Time::getSecondes(){
return this->secondes;
}
void Time::setHeures(int h){
this->heures = h;
}
void Time::setMinutes(int m){
this->minutes = m;
}
void Time::setSecondes(int s){
this->secondes = s;
}
int compare(const Time &t1, const Time &t2){
int i1 = t1.heures * 10000 + t1.minutes * 100 + t1.secondes;
int i2 = t2.heures * 10000 + t2.minutes * 100 + t2.secondes;
if (i1 > i2)
return -1;
else if (i1 < i2)
return 1;
else
return 0;
/*
if (t1.heures > t2.heures)
return -1;
else if (t1.heures < t2.heures)
return 1;
else {
if (t1.minutes > t2.minutes)
return -1;
else if (t1.minutes < t2.minutes)
return 1;
else {
if (t1.secondes > t2.secondes)
return -1;
else if (t1.secondes < t2.secondes)
return 1;
else
return 0;
}
}
*/
}
void Time::afficher(){
//printf("%02d:%02d:%02d\n", this->heures, this->minutes, this->secondes);
cout << setw(2) << setfill('0') << this->heures << ":";
cout << setw(2) << setfill('0') << this->minutes << ":";
cout << setw(2) << setfill('0') << this->secondes << endl;
}
void Time::changeTime(int s){
int total = this->heures * 60 * 60;
total += this->minutes * 60;
total += this->secondes;
total += s;
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!