Le but de cet exercice est d'implémenter la classe Individu dont le schéma est donné ci-dessous :
Vous tiendrez compte des éléments suivants :
Une petite indication : la réalisation de cet exercice implique de manipuler des tableaux de caractères pour stocker des chaînes de caractères. La fonction strdup qui alloue un tableau de caractères avant de l'initialiser doit être proscrite car elle appelle malloc, lequel est bani du C++. Voici donc un extrait de code qui permet d'initialiser un pointeur de caractères à partir d'une chaîne :
char *nouvelle; char ancienne[]="Chaine a recopier"; nouvelle=new char[strlen(ancienne)+1]; // Allocation du tableau strcpy(nouvelle,ancienne); // Recopie
Un nombre complexe admet 2 représentations :
La figure suivante illustre comment passer de la forme cartésienne à la forme polaire et réciproquement.
En fait, l'on a :
Et :
Les deux formes étant duales, il n'y a pas de raison de choisir l'une plus que l'autre pour la représentation interne. En outre, l'utilisateur n'a pas à se soucier de cette différence de stockage. Aussi, nous fournirons 4 méthodes permettant de récupérer les coordonnées dans les 2 systèmes ainsi que 2 méthodes permettant de modifier un nombre complexe dans chacune de ses représentations.
La figure suivante illustre la classe NombreComplexe si l'on utilise une représentation interne cartésienne.
Reste à régler le problème du constructeur. Idéalement, il serait agréable de disposer de 2 constructeurs, l'un en mode cartésien et l'autre en mode polaire, tel que suggéré par le fragment de code suivant :
NombreComplexe::NombreComplexe(double a, double b); NombreComplexe::NombreComplexe(double mode, double argument);
Hors ceci n'est pas possible car les signatures d'arguments sont identiques. La solution consiste donc à créer un constructeur par défaut initialisant le nombre complexe à une valeur facile à identifier dans les deux systèmes : l'origine. Les méthodes modifierCartésien et modifierPolaire permettront ensuite d'obtenir un nombre quelconque dans le système choisi.
A la suite de la classe NombreComplexe et des explications vues en cours, codez la classe Point telle qu'explicitée sur la figure ci-dessous :.