Exercice 71
Énoncé
Soit une classe vecteur3d définie comme suit :
class vecteur3d
{ float x, y, z ;
public :
vecteur3d (float c1=0.0, float c2=0.0, float c3=0.0)
{ x = c1 ; y = c2 ; z = c3 ;
}
.....
} ;
Introduire, dans cette classe, une fonction membre nommée normax permettant
d’obtenir, parmi deux vecteurs, celui qui a la plus grande norme. On prévoira trois
situations :
a. le résultat est renvoyé par valeurþ ;
b. le résultat est renvoyé par référence, l’argument (explicite) étant également
transmis par référenceþ;
c. le résultat est renvoyé par adresse, l’argument (explicite) étant également transmis
par adresse.
a. La seule difficulté réside dans la manière de renvoyer la valeur de l’objet ayant
appelé une fonction membre, à savoir *this. Voici la définition de la fonction normax
(la déclaration en découle immédiatement) :
vecteur3d vecteur3d::normax (vecteur3d v)
{ float norm1 = x*x + y*y + z*z ;
float norm2 = v.x*v.x + v.y*v.y + v.z*v.z ;
if (norm1>norm2) return *this ;
else return v ;
}
Voici un exemple d’utilisation (on suppose que v1, v2 et w sont de type vecteur3d) :
w = v1.normax (v2) ; /* on obtient dans w celui des deux vecteurs v1 et v2 */
/* ayant la plus grande norme */
Notez bien que l’affectation ne pose aucun problème ici, puisque notre classe ne
comporte aucun pointeur sur des parties dynamiques.
b. Aucun nouveau problème ne se pose. Il suffit de modifier ainsi l’en-tête de notre
158
Précédent

- 159/398

Suivant