bonjour
j'ai un code qui marche et j'aimerai comprendre pk il faut mettre friend :
j'aimerai comprendre pk je dois utiliser le mot friend pour la fonction prod, je ne comprend pas.
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(); }
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
Partager