Exercice 72
Énoncé
Réaliser une classe vecteur3d permettant de manipuler des vecteurs à 3 composantes
(de type float). On y prévoira :
• un constructeur, avec des valeurs par défaut (0),
• une fonction d’affichage des 3 composantes du vecteur, sous la forme :
< composante1, composante2, composante3 >
• une fonction permettant d’obtenir la somme de 2 vecteurs ;
• une fonction permettant d’obtenir le produit scalaire de 2 vecteurs.
On choisira les modes de transmission les mieux appropriés. On écrira un petit
programme utilisant la classe ainsi réalisée.
La fonction membre calculant la somme de deux vecteurs (nous la nommerons somme)
reçoit implicitement (par référence) un argument de type vecteur3d. Elle comportera
donc un seul argument, lui aussi de type vecteur3d. On peut, a priori, le transmettre par
adresse, par valeur ou par référence. En fait, la transmission par adresse, en C++, n’a
plus guère de raison d’être, dans la mesure où la transmission par référence fait la
même chose, moyennant une écriture plus agréable.
Le choix doit donc se faire entre transmission par valeur ou par référence. Lorsqu’il
s’agit de transmettre un objet (comportant plusieurs membres donnée), la transmission
par référence est plus efficace (en temps d’exécution). Qui plus est, la fonction somme
reçoit déjà implicitement un vecteur par référence, de sorte qu’il n’y a aucune raison de
lui transmettre différemment le second vecteur.
Le même raisonnement s’applique à la fonction de calcul du produit scalaire (que nous
nommons prodscal).
En ce qui concerne la valeur de retour de somme, également de type vecteur3d, il n’est en
revanche pas possible de la transmettre par référence. En effet, ce « résultat » (de type
vecteur3d) sera créé au sein de la fonction elle-même, ce qui signifie que l’objet
correspondant sera de classe automatique, donc détruit à la fin de l’exécution de la
fonction. Il faut donc absolument en transmettre la valeur.
160
Énoncé
Réaliser une classe vecteur3d permettant de manipuler des vecteurs à 3 composantes
(de type float). On y prévoira :
• un constructeur, avec des valeurs par défaut (0),
• une fonction d’affichage des 3 composantes du vecteur, sous la forme :
< composante1, composante2, composante3 >
• une fonction permettant d’obtenir la somme de 2 vecteurs ;
• une fonction permettant d’obtenir le produit scalaire de 2 vecteurs.
On choisira les modes de transmission les mieux appropriés. On écrira un petit
programme utilisant la classe ainsi réalisée.
La fonction membre calculant la somme de deux vecteurs (nous la nommerons somme)
reçoit implicitement (par référence) un argument de type vecteur3d. Elle comportera
donc un seul argument, lui aussi de type vecteur3d. On peut, a priori, le transmettre par
adresse, par valeur ou par référence. En fait, la transmission par adresse, en C++, n’a
plus guère de raison d’être, dans la mesure où la transmission par référence fait la
même chose, moyennant une écriture plus agréable.
Le choix doit donc se faire entre transmission par valeur ou par référence. Lorsqu’il
s’agit de transmettre un objet (comportant plusieurs membres donnée), la transmission
par référence est plus efficace (en temps d’exécution). Qui plus est, la fonction somme
reçoit déjà implicitement un vecteur par référence, de sorte qu’il n’y a aucune raison de
lui transmettre différemment le second vecteur.
Le même raisonnement s’applique à la fonction de calcul du produit scalaire (que nous
nommons prodscal).
En ce qui concerne la valeur de retour de somme, également de type vecteur3d, il n’est en
revanche pas possible de la transmettre par référence. En effet, ce « résultat » (de type
vecteur3d) sera créé au sein de la fonction elle-même, ce qui signifie que l’objet
correspondant sera de classe automatique, donc détruit à la fin de l’exécution de la
fonction. Il faut donc absolument en transmettre la valeur.
160
