utilisation justifiée de "friend" ?
bonjour
j'ai un code qui marche et j'aimerai comprendre pk il faut mettre friend :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include<iostream.h>
#include<string.h>
class matrice;
class vect{
private:
double v[3];
public:
vect(double a=0, double b=0, double c=0)
{
v[0]=a;
v[1]=b;
v[2]=c;
}
void affichage(void)
{
cout<<"le vecteur a pour coordonnee: "<<v[0]<<" "<<v[1]<<" "<<v[2]<<"\n";
}
friend vect prod(vect,matrice);
};
class matrice
{
private:
double mat[3][3];
public:
matrice(double x[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
mat[i][j] = x[i][j];
}
}
}
friend vect prod(vect,matrice);
};
vect prod(vect d,matrice matrix)
{
int i,j;
double somme;
vect resultat;
for(i=0;i<3;i++)
{
somme=0;
for(j=0;j<3;j++)
{
somme = somme + matrix.mat[i][j] * d.v[j];
}
resultat.v[i]=somme;
}
return resultat;
}
void main(void)
{
vect toto(1,2,3);
double matrix[3][3]={1,2,3,4,5,6,7,8,9};
matrice essai1(matrix);
vect resultat;
toto.affichage();
resultat=prod(toto,matrix);
resultat.affichage();
} |
j'aimerai comprendre pk je dois utiliser le mot friend pour la fonction prod, je ne comprend pas.
lorsque j'ai enlevé prod, il m'a dit 3 erreur, je pense que c parce que la fonction n'a pas le droit d'accéder à matrix.mat ou d.v[j] par exemple.
je trouve ça étonnant parce que j'aurai mis dans les 2 classes les lignes "vect prod(vect,matrice);"
mais dans ce cas dans la définition? ou déclaration? j'aurai eu des problème, si c'est
vect vect::prod (vect d, matrice matrix)
ou
matrice vect::prod (vect d, matrice matrix)
=> est-ce pour cela qu'il n'est pas possible d'éviter le mot friend et que je ne peux pas déclarer cette fonction tout comme je déclare les autres fonctions d'habitude dans ma classe ?
et s'il est possible de déclarer cette fonction comme fonction membres sans le mot friend, alors pourriez vous me donner le code de déclaration/définition svp?
pour l'utilisation de friend, d'après la faq c++, j'ai lu "Les amis sont parfois un meilleur choix d'un point de vue syntaxique (comme par exemple quand une fonction amie permet à un objet de type Fred d'être utilisé en tant que second paramètre de la fonction, tandis qu'une fonction membre obligerait à ce que l'objet Fred soit en premier). "
=> donc éviter le mot friend serait possible en mettant soit vecteur d en 1er soit matrice matrix en 1er ? je ne vois pas trop là la déclaration ou définition que ça aurait
je vous remercie d'avance pour votre aide