# Exercices en langage C++/Les classes
## EXERCICE 1 : Rectangle

Écrire un programme utilisant une classe rectangle dont le constructeur prend deux paramètres, largeur et hauteur et qui offre les fonctions suivantes :
* calcul du périmètre,
* calcul de la surface,
* affichage,
* ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la largeur et de la hauteur).
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 2 : Pile d'entiers (stack)

Une pile est un ensemble dynamique d’éléments où le retrait se fait d’une façon particulière. En effet, lorsque l’on désire enlever un élément de l’ensemble, ce sera toujours le dernier inséré qui sera retiré. Un objet pile doit répondre aux fonctions suivantes :
* Initialiser une pile,
* Empiler un élément sur la pile (push),
* Dépiler un élément de la pile (pop).
Pour cela nous allons supposer que les éléments à empiler sont de type int.
Le programme principal comprend la définition d'une classe pile et un programme de test qui crée deux piles p1 et p2, empile dessus des valeurs entières et les dépile pour vérifier les opérations push et pop.
* Découverte et travail des classes.
* Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 3 : Fichier

Imaginons une application qui traite des fichiers. Ces fichiers vont être lus en mémoire, traités puis sauvegardés. Une fois lu en mémoire, un fichier a deux caractéristiques, une adresse à partir de laquelle se situe le fichier et une longueur, ce qui se concrétisera par un pointeur et une longueur en nombre d’octets. Imaginons la classe "Fichier" avec un constructeur et un destructeur et les trois méthodes suivantes :
* la méthode "creation" qui va allouer un certain espace à partir du pointeur p,
* la méthode "remplit" qui va remplir arbitrairement cet espace (ces remplissages arbitraires sont la preuve de la bonne gestion mémoire car l’accès à une zone non déclarée provoque une violation d’accès),
* la méthode "affiche" qui va afficher la zone mémoire pointée par p.
Puis écrivons un programme maître qui instancie notre classe par new, appelle nos trois méthodes et détruit l’objet par delete.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 4 : Point

Réaliser une classe point permettant de manipuler un point d'un plan. On prévoira :
* les coordonnées x et y du point en membres privés,
* un constructeur (vous pouvez également implémenter les trois types de constructeur),
* une fonction membre déplace effectuant une translation définie par ses deux arguments dx et dy (double),
* une fonction membre affiche affichant les coordonnées cartésiennes du point,
* une fonction membre saisir permettant de saisir les coordonnées cartésiennes du point,
* une fonction membre distance effectuant calculant la distance entre deux points,
* une fonction membre milieu donnant le milieu d'un segment.
On écrira séparément :
* un ficher source constituant la déclaration et la définition de la classe,
* un petit programme d'essai gérant la classe point.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 5 : Compteur

On souhaite implémenter une classe représentant un compteur entier. Un tel objet se caractérise par :
* Une valeur entière, positive ou nulle, nulle à l'origine.
* Le fait qu'il ne peut varier que par pas de 1 (incrémentation ou décrémentation). On convient qu'une décrémentation d'un compteur nul est sans effet.
Il s'agit de créer une classe Compteur pour rendre le service demandé. On écrira en outre un petit programme de test qui :
* créera un compteur et affichera sa valeur ;
* l'incrémentera 10 fois, puis affichera à nouveau sa valeur ;
* le décrémentera 20 fois, puis affichera une troisième fois sa valeur.
La sortie de ce programme doit donner quelque chose comme :
* Découverte et travail des classes.
* Utilisation d'un constructeur et d'un destructeur.
Fichier Compteur.h : déclaration de la classe Compteur
Fichier Compteur.cpp : implémentation de la classe Compteur
Fichier testCompteur.cpp : implémentation de la classe Compteur

## EXERCICE 6 : Gestion d'étudiants

1/ On voudrait gérer les étudiants d’une institution à l’aide d’une classe Etudiant définie par :
les attributs suivants :
- nom : nom d’un étudiant
- prénom: prénom d’un étudiant
- tabnotes : tableau contenant les notes d’un étudiant, sachant qu’un étudiant a au total 10 notes.
les méthodes suivantes :
- void saisie, permettant la saisie d’un étudiant
- void affichage, permettant l’affichage d’un étudiant
- float moyenne, retourne comme résultat la moyenne des notes d’un étudiant.
- int admis, retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0, sinon. Un étudiant est considéré comme étant
admis lorsque la moyenne de ses notes est supérieure ou égale à 10.
- int exae_quo (Etudiant E), retourne comme résultat la valeur 1, si deux étudiants ont la même moyenne et la valeur 0, sinon.
Ecrire la classe Etudiant dans le langage C++.
2/ On voudrait maintenant représenter, à l’aide d’une nouvelle classe Etudiant_en_Maitrise, certains étudiants particuliers dans cette
institution qui sont les étudiants en dernière année d’études. Ces étudiants possèdent en effet un attribut supplémentaire : note_memoire,
qui représente la note de leur mémoire de fin d’études.
Les méthodes à associer à cette classe sont les suivantes :
- void saisie, permettant la saisie d’un étudiant en maîtrise
- void affichage, permettant l’affichage d’un étudiant en maîtrise
- float moyenne, retourne comme résultat la moyenne des notes d’un étudiant en maîtrise
- int admis, retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0, sinon. Un étudiant en maîtrise est considéré
comme étant admis lorsque, d’une part, la moyenne de ses notes est supérieure ou égale à 10 et d’autre part la note obtenue pour son mémoire
de fin d’études est supérieure ou égale à 10.
- int exae_quo (Etudiant_en_Maitrise E), retourne comme résultat la valeur 1, si deux étudiants ont d’une part la même moyenne et d’autre
part, la même note de mémoire et retourne la valeur 0, sinon.
a) Quelles sont les méthodes qui sont à redéfinir dans la classe Etudiant_en_Maitrise ?
b) Ecrire la classe Etudiant_en_Maitrise dans le langage C++.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.