Vous êtes sur la page 1sur 2

Informatique Industrielle TD/TP4

Programmation Orientée Objet


Notion de Classes

Exercice 1 :

- Terminer et valider les classes point, ligne et personne vues en TD


- Pour chaque classe, proposer des fonctions d’affichage (exemple d’affichage d’un point : p = (5,6))
- Ecrire une fonction générale permettant de fusionner deux objets de type Ligne
- Utiliser la fonction définie dans la question précédente pour la fusion de 8 objets de type Ligne

Exercice 2 :

Ecrire une classe nommée myString qui permet de représenter des objets de type chaîne de
caractères. Cette classe doit comporter deux attributs privés : un pointeur de caractères qui permettra
d’adresser la zone mémoire dans laquelle on rangera la chaîne; et un entier permettant de connaître le
nombre de caractères stockés dans cette chaîne. Cette classe devra comporter deux constructeurs, l’un
sans arguments, l’autre avec un argument de type tableau de caractères. Dans ce cas, le tableau passé
en paramètre contiendra le caractère ’\0’ comme marqueur de fin de chaîne. Par contre, ce caractère de
fin de chaîne ne devra plus être présent dans la chaîne interne à une instance de la classe myString.
Vous ajouterez également un destructeur à cette classe.
La définition de la classe devra se trouver dans un fichier myString.h, tandis que l’implantation du
code des trois méthodes devra se trouver dans un fichier myString.cpp
Vous testerez cette première version de la classe dans la fonction main qui, pour le moment, se
contentera de déclarer deux chaînes par l’intermédiaire de chacun des deux constructeurs.

Exercice 3 :

On souhaite pouvoir afficher le contenu de la chaîne de caractères stockée dans une instance de la
classe MyString. Ajouter à cette classe la méthode print de signature : void print(void)
Cette méthode se contentera d’afficher les caractères contenus dans l’instance appelante, les uns
derrière les autres.
Modifier la fonction main de manière à ce qu’elle affiche les deux chaînes instanciées dans l’exercice
précédent, selon le format suivant :
chaine 1 : ...
chaine 2 : ...
Les écritures sur la sortie standard devront se faire avec la syntaxe C++.

Exercice 4 :

De manière à bien comprendre l’ordre et le moment d’appel des constructeurs et destructeurs, modifier
le code de ceux-ci de manière à leur faire effectuer un affichage (en plus de leur action normale) lors
de leur appel. Cet affichage devra avoir le format suivant :
constructeur <signature du constructeur> pour <contenu de la chaine>
destructeur pour <contenu de la chaine>

Vérifier ces appels sur l’exemple de l’exercice précédent. Vous conserverez la présence de ces
affichages pour la suite du TP.
Exercice 5 :

Ajouter à la classe myString les méthodes suivantes :


– méthode permettant de retourner la longueur de l’instance de la chaîne appelante ;
– méthode permettant de récupérer le caractère situé à un indice donné de la chaîne. Si l’indice est
invalide, le caractère espace sera retourné ;
– méthode permettant de savoir si un caractère passé en paramètre est présent ou pas dans la chaîne.
La valeur retournée sera un booléen.

Vous testerez chacune de ces méthodes dans votre fonction main.

Exercice 6 :

Par défaut, chaque classe C++ se voit affecter d’un constructeur par recopie, dont le code correspond
aux recopies, membre à membre, entre les deux instances utilisée. Testez ce constructeur par défaut,
en ajoutant une ligne de la forme : myString s3(s2); où s2 est la seconde instance de
myString utilisée dans les questions précédentes. Vous afficherez ensuite le contenu de s3 de
manière à vérifier que son contenu est correct.
Que se passe-t-il lors de l’exécution du programme compilé ? Pourquoi ?
En déduire le code du constructeur par recopie de la classe myString. On rappelle que sa signature
devra être : myString(const myString& s)
Comme précédemment, vous insérerez un affichage permettant de visualiser l’appel à ce constructeur.
Vérifiez que son fonctionnement est correct.

Exercice 7 :

Ajouter à la classe une méthode qui aura pour objectif de concaténer l’instance appelante avec la
chaîne passée en paramètre. Cette méthode aura la signature suivante :
void concat(MyString s)
En examinant les affichages obtenus de la part des constructeurs et destructeurs, expliquez ce qui se
passe lors de l’appel à cette méthode.
Modifiez la signature de la méthode de la manière suivante :
void concat(MyString& s)
Quel changement notez-vous et pourquoi ?
Quel est le dernier problème de cette signature ? Proposez une modification permettant de le résoudre.

Exercice 8 :

Ajoutez à votre classe une méthode permettant de déterminer si deux instances de la classe
myString sont identiques ou pas.