POO - TP2 C++

mar. 01 avril 2008

Une première classe

Préambule : ce TD-TP est la suite logique du précédent, dans lequel on réutilisera (déjà ! ;) ce que l'on a fait en langage impératif. Il consiste donc essentiellement en l'adaptation de la notion de complexe par une classe.

Exercice 1 : constructeur

Pour la classe Complexe, spécifiez les constucteurs suivants en justifiant leur rÎle :

  • constructeur par défaut (i.e sans paramètre),
  • constructeur avec en paramètre, la partie réelle et la partie imaginaire,
  • constructeur avec en paramètre, une référence constante à une instance de Complexe.

Exercice 2 : destructeur

Concevez un destructeur pour la classe Complexe qui se contente d'afficher un message sur le fichier standard cerr.

Exercice 3 : les méthodes

Associez à la classe Complexe, les méthodes (autres que constructeurs et destructeur) qui vous semblent nécessaires. Précisez leur en-tête, rÎle et antécédent.

Exercice 4 : implantation

Implantez la classe Complexe, qui comportera au minimum les méthodes suivantes (elles seront utilisées en notation fonctionnelle) : accès aux attributs de la classe, affichage, opérations sur les complexes et comparaison.

float Complexe::getRe(); // partie reelle du complexe
float Complexe::getIm(); // partie imaginaire du complexe
void Complexe::Print(); // affichage sur stdout des valeurs du complexe
void Complexe::Sum(const Complexe&); // ajout d'un complexe au complexe courant
bool Complexe::Identical(const Complexe&); // comparaison d'un complexe et du complexe courant

Exercice 4 bis (optionnel) : variation sur Sum

Implanter les méthodes suivantes :

void Complexe::Sum1(const Complexe& z)
{
  re = re + z.re;
  im = im + z.im;
}
Complexe Complexe::Sum2(const Complexe& z)
{
  return Complexe(re+z.re, im+z.im);
}
Complexe Complexe::Sum3(const Complexe& z)
{
  re = re + z.re;
  im = im + z.im;
  return *this;
}
Complexe& Complexe::Sum4(const Complexe& z)
{
  re = re + z.re;
  im = im + z.im;
  return *this;
}

puis tester avec :

Complexe x(1,2);
Complexe y(3,4);
Complexe z(y);
x.Print();
(x.Sum1(y));
x.Print();
(x.Sum2(y)).Print();
x.Print();
( (x.Sum2(y)).Sum2(z) ).Print();
x.Print();
( (x.Sum3(y)).Sum3(z) ).Print();
x.Print();
( (x.Sum4(y)).Sum4(z) ).Print();
x.Print();

Quelle méthode Sum va t'on choisir effectivement ?

Exercice 5 : mise en œuvre

Ecrire un programme qui utilise votre classe, dont vous fournirez l'implantation sous forme d'une bibliothèque.

Exercice 6 : variation sur le thème de la classe Complexe

Modifier la méthode Sum pour que celle-ci renvoie une instance de Complexe. Quelle est la durée de vie de l'instance retournée ? Quelle utilisation peut-on faire de cette modification ?