# Programmation C++/Les classes/Exercices

* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
[ Modifier le sommaire ]

## Exercices

Dans tous ces exercices, qui sont sur le thème des transports, les mesures doivent être exprimées en double.

### Exercice 1

Créez une classe position2D qui vous permet de repérer un point unique sur un plan. Vous devrez prévoir tous les constructeurs et destructeurs strictement nécessaires (et uniquement ceux là), ainsi que les opérateurs d'affectation, d'égalité et la possibilité de l'envoyer dans un flux sous la forme "(x,y)". Le point est considéré comme nul si ses coordonnées sont (0,0). Cette valeur sera affectée par défaut au point (mais donner la possibilité d'initialiser les valeur à la création).
Un certain nombre de constructeurs et d'opérateurs sont définis automatiquement par le compilateur. La classe ne comportant aucun membre de type pointeur, il est inutile de les redéfinir.
Le constructeur de copie et l'opérateur d'affectation sont automatiquement générés par le compilateur. Comme les membres de la classe sont de type POD, ils font le travail comme attendu. Il est donc inutile de les définir ici. Dans cet exemple, les opérateur de comparaison sont définis comme membre de classe. Il est généralement préférable de les définir hors de la classe.

### Exercice 2

Créer une classe segment utilisant la classe position2D précédemment créé. Elle devra définir tous les jeux d'opérateurs nécessaires à son fonctionnement (les mêmes que position2D). Elle devra en plus donner la norme (la longueur) du segment. Elle devra pouvoir être envoyée dans un flux sous la forme "[(x1,y1),(x2,y2)]". Par défaut, le segment est initialisé avec les valeur "[(0,0),(1,1)]".

### Exercice 3

Créez une classe Magicien dérivée de la classe Personnage située dans l'annexe 1. Certaines méthodes devront être réécrites pour garder la cohérence. Écrivez le moins de code possible Créez une classe Position3D dérivée de la classe Position2D située dans l'annexe 1. Certaines méthodes devront être réécrites pour garder la cohérence. Écrivez le moins de code possible.
La manière dont un personnage attaquera un autre variera en fonction de la catégorie à laquelle il appartient et de ses capacité propre

### Exercice 4

Créez une classe Véhicule utilisant de Position3D. Ce véhicule a une vitesse et un nombre de passagers (en entier). Il a une méthode double trajet(Position3D& pos1, Position3D& pos2) pour évaluer en combien de temps il couvre une distance (vitesse en Km/h). Vous devrez choisir correctement entre héritage et composition.
L'héritage doit répondre à la question "est un" ce qui n'est clairement pas le cas ici. Un véhicule n'est pas une position, mais sa position est une de ses propriétés. Ici, la composition est de mise. La fonction trajet ne travaille pas sur les propriétés d'une instance de classe. Elle doit donc être déclarée static et peut s'utiliser directement.

### Exercice 5

En utilisant la classe véhicule de l'exercice précédent, créez une classe Avion. Il a un nombre maximal de passagers (qui ne pourra jamais être supérieur à 300). Vous devez pouvoir ajouter et retirer des passagers et afficher ces derniers soit tous, soit en précisant son numéro de place. Les passager sont des instances de la classe personnage de l'exercice 3. En tant qu'appareil volant il est sensible au poids. Son poids est une propriété constante exprimée en tonnes. Vous devez fournir une fonction qui donne la quantité de carburant à embarquer en mètres cube pour effectuer le vol sachant qu'il consomme 1l de kérosène par kilo pour 10 km parcouru (le kérosène est considéré comme dépourvu de poids pour cet exercice).