Salut !
J'ai un problème d'encapsulation, je n'arrive pas à trouver de moyen pour que chaque classe n'est accès qu'as ce qu'il a besoin.
Voici le code :
Quelque solution :
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 // Charger de s'occuper de "type value_" (création / suppression / stockage) class Value { public : Value(type value) : value_(value) {} private : type value_; }; // classe mere qui sera hérité par beaucoup de classe fils class Mere { public : Mere(type t) : v_(t) { } //... private : Value v_; //... }; // Cette classe et ses descendants doivent être les seul qui on le droit d'accéder à "Value::value_" class SeulClassQuiUtiliseValue { public : void getValue(A &a) { // besoin d'utiliser A.v.value_ } };
1) Créer des accesseurs de "v_" dans "Mere" et de "value_" dans "Value".
Problème : Toute les classe qui hérite de la classe "Mere" auront un moyen d'accéder également a "value_" en utilisant les accésseurs.
2) Mettre SeulClassQuiUtiliseValue::getValue(A &a) comme amie de "Mere" et de "Value"
Problème : Cette méthode "getValue" auras un accès complet au membre privé de "Mere" alors que seulement "v_" nous intéresse.
3) Créer un accésseur de "V_" dans classe "Mere" et mettre SeulClassQuiUtiliseValue::getValue(A &a) comme amie de "Value".
Problème : Toute les classe qui hérite de la classe "Mere" auront accès a "v_".
Bien qu'ils ne puissent rien en faire directement car pas accès a "value_",
on pourrais être tenté d'utiliser ce "v_" comme argument pour une méthode de "SeulClassQuiUtiliseValue" (ou une classe dérivé).
Ainsi, la classe Value jouerait un rôle dans les classe dérivé de la classe "Mere" alors quel ne devrais pas.
Les trois solutions au quel j'ai pensé présente toutes des inconvenants...
Existerait il d'autre solutions pour résoudre ce problème ?
Et si aucune autre solution existe, quel serais la meilleur ?
Merci pour votre aide.
Partager