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 ?