Exercice 85
Énoncé
Soit la classe vecteur3d ainsi définie :
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 ;
}
} ;
Définir l’opérateur binaire + pour qu’il fournisse la somme de deux vecteurs, et
l’opérateur binaire * pour qu’il fournisse le produit scalaire de deux vecteurs. On
choisira ici des fonctions amies.
Il suffit de créer deux fonctions amies nommées operator + et operator *. Elles recevront
deux arguments de type vecteur3d ; la première fournira en retour un objet de type
vecteur3d, la seconde fournira en retour un float.
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 ;
}
friend vecteur3d operator + (vecteur3d, vecteur3d) ;
friend float operator * (vecteur3d, vecteur3d) ;
} ;
vecteur3d operator + (vecteur3d v, vecteur3d w)
{ vecteur3d res ;
res.x = v.x + w.x ;
res.y = v.y + w.y ;
return res ;
}
float operator * (vecteur3d v, vecteur3d w)
{ return (v.x * w.x + v.y * w.y + v.z * w.z) ;
}
Il est possible de transmettre par référence les arguments des deux fonctions amies
concernées.
Souvent, dans ce cas, on utilisera le qualificatif const puisque la fonction est supposée
ne pas modifier les valeurs de ses arguments. Par exemple :
201
Énoncé
Soit la classe vecteur3d ainsi définie :
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 ;
}
} ;
Définir l’opérateur binaire + pour qu’il fournisse la somme de deux vecteurs, et
l’opérateur binaire * pour qu’il fournisse le produit scalaire de deux vecteurs. On
choisira ici des fonctions amies.
Il suffit de créer deux fonctions amies nommées operator + et operator *. Elles recevront
deux arguments de type vecteur3d ; la première fournira en retour un objet de type
vecteur3d, la seconde fournira en retour un float.
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 ;
}
friend vecteur3d operator + (vecteur3d, vecteur3d) ;
friend float operator * (vecteur3d, vecteur3d) ;
} ;
vecteur3d operator + (vecteur3d v, vecteur3d w)
{ vecteur3d res ;
res.x = v.x + w.x ;
res.y = v.y + w.y ;
return res ;
}
float operator * (vecteur3d v, vecteur3d w)
{ return (v.x * w.x + v.y * w.y + v.z * w.z) ;
}
Il est possible de transmettre par référence les arguments des deux fonctions amies
concernées.
Souvent, dans ce cas, on utilisera le qualificatif const puisque la fonction est supposée
ne pas modifier les valeurs de ses arguments. Par exemple :
201
