Bonjour,
Je rencontre un véritable casse tête sur lequel j'aurais besoin de vos lumières.
Voici le code exemple :
Lors de la compilation d'un tel programme je rencontre l'erreur, " Vous ne pouvez pas accèder à A::valeur. Ce champs est privé."
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 class A1 ; class A2 ; class A3 ; //classe mère class A { private : double valeur ; } //les trois classes filles class A1 : public A { public : A1(double x = 0):valeur(x) ; friend A3 operator/(A1 x , A2 y); } class A2 : public A { public : A2(double x = 0):valeur(x) ; friend A3 operator/(A1 x , A2 y); } class A3 : public A { public : A3(double x = 0):valeur(x) ; } //la division qu'on effectue A3 operator/(A1 x , A2 y){ return A3(x.valeur / y.valeur); }
Avant de vous demander de l'aide, je suis allé voir la FAQ et je suis tombé sur :
"Je ne fais pas forcément confiance aux enfants de mes amis
Les privilèges de l'amitié ne sont pas hérités. Les classes dérivées d'une classe amie ne sont pas forcément des amis. Si la classe Fred déclare que la classe Base est une amie, les classes dérivées de Base n'ont pas à avoir automatiquement des droits d'accès particuliers aux objets de type Fred.
Je ne fais pas forcément confiance aux amis de mes amis
Les privilèges de l'amitié ne sont pas transitifs. Un ami d'un ami n'est pas forcément un ami. Si la classe Fred déclare que la classe Wilma est une amie, et que la classe Wilma déclare que Betty est une amie, la classe Betty n'a pas à avoir automatiquement des droits d'accès particuliers aux objets de type Fred.
L'amitié n'est pas réciproque
Vous ne me faites pas confiance simplement parce que je déclare que vous être mon ami. Les privilèges de l'amitié ne sont pas réciproques. Si la classe Fred déclare que la classe Wilma est une amie, les objets de type Wilma n'ont pas à avoir automatiquement des droits d'accès particuliers aux objets de type Wilma. "
Seulement mon cas ne semble être aucun de ses trois mais j'ai l'impression, peut-être que je me trompe, que je ne peux acceder avec l'operateur / au champs valeur car par héritage, je vais aller le chercher dans l'objet A.
J'aimerais comprendre comment résoudre ce problème.
Merci
Partager