bonjour

j'ai un code qui marche et j'aimerai comprendre pk il faut mettre friend :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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