POLYTECH – ELEC4 2018–2019
Contrôle de Programmation C++
Durée : 1h30 Aucun document autorisé
Nom : Prénom :
1 Question 1
I 1. On considère que la classe std::string n’existe pas, et on souhaite développer une classe String
pour représenter les chaînes de caractères. Complétez la classe String suivante :
c l a s s String {
protected :
c h a r * s ; // les caractères de la chaîne
i n t lg ; // sa longueur
};
avec :
1. le constructeur qui permet, par exemple, la déclaration String s1("toto");
2. le constructeur qui permet, par exemple, la déclaration String s2 = s1; (attention, on
obtient une nouvelle chaîne de caractères)
3. l’ opérateur qui permet, par exemple, s2 = s1; (attention, on obtient une nouvelle chaîne
de caractères)
4. l’opérateur qui permet d’accéder ou de modifier le ième (0 6 i < lg) caractère de la chaîne
courante. Vous émettrez l’exception IndexException si l’indice est incorrect.
5. l’opérateur qui permet d’écrire s2 + s2 (concaténation de deux chaînes)
6. la surcharge de l’opérateur <<
Note : vous pouvez utiliser les fonctions strlen, strcpy et strcat du langage C (#include <cstring>)
1
2
3
2 Question 2
On dispose d’une classe abstraite générique Liste et d’une classe d’implémentation générique
ListeChainee qui l’implémente à l’aide d’une structure d’éléments dynamiques chaînés.
On souhaite implémenter une pile à l’aide d’une liste. On rappelle que les méthodes disponibles
sur une liste sont :
i n t longueur () c o n s t ;
v o i d inserer ( c o n s t T &x , c o n s t i n t r );
v o i d supprimer ( c o n s t i n t r );
c o n s t T & ieme ( i n t r ) c o n s t ;
I 2. Écrivez en C++ la classe abstraite générique Pile avec les quatre méthodes abstraites estVide,
empiler, dépiler, et sommet.
I 3. En vous servant de la classe ListeChainee, écrivez en C++ la classe générique PileChainee
qui implémente une Pile à l’aide d’une liste chaînée. Vous programmez le(s) constructeur(s) et
les quatre méthodes de manipulation d’une pile. Vous émettrez l’exception PileVideException si
nécessaire.
4
5
6
I 4. Écrivez en C++ la fonction main qui teste votre classe PileChînee, et en particulier attrape une
exception.