fonction, sans en modifier le corps :
vecteur3d & vecteur3d::normax (vecteur3d & v)
La fonction normax s’utilise comme précédemment.
c. Il faut, cette fois, adapter en conséquence l’en-tête et le corps de la fonction :
vecteur3d * vecteur3d::normax (vecteur3d * adv)
{
float norm1 = x * x + y * y + z * z ;
float norm2 = adv->x * adv->x + adv->y * adv->y + adv->z * adv->z ;
if (norm1>norm2) return this ;
else return adv ;
}
Ici, l’utilisation de la fonction nécessite quelques précautions. En voici un exemple (v1,
v2 et w sont toujours de type vecteur3d) :
w = *(v1.normax(&v2)) ;
Discussion
En ce qui concerne la transmission de l’unique argument explicite de normax, il faut noter
qu’il est impossible de la prévoir par valeur, dès lors que normax doit restituer son
résultat par adresse ou par référence. En effet, dans ce cas, on obtiendrait en retour
l’adresse ou la référence d’un vecteur alloué automatiquement au sein de la fonction.
Notez qu’un tel problème ne se pose pas pour l’argument implicite (this), car il
correspond toujours à l’adresse d’un vecteur (transmis automatiquement par référence),
et non à une valeur.
Par ailleurs, on ne perdra pas de vue qu’il est rare qu’une fonction puisse renvoyer
l’adresse ou la référence d’un objet. Ici, la chose n’est possible que parce que ce
résultat n’a pas été créé dynamiquement dans la fonction.
159
Précédent

- 160/398

Suivant