bonsoir voila j'ai un truc qui me trotine dans la tête: je dispose d'une classe avec dedans un tableau (privé) d'objet (des objets de même type qui sont une classe en fait) comment acceder a ces objets sans enfreindre l'encapsulation???
Version imprimable
bonsoir voila j'ai un truc qui me trotine dans la tête: je dispose d'une classe avec dedans un tableau (privé) d'objet (des objets de même type qui sont une classe en fait) comment acceder a ces objets sans enfreindre l'encapsulation???
Ca repond à ta question?Code:
1
2
3
4
5
6
7
8 class A { private: vector<int> vect; public: vector<int> &get_vect() { return vect; } const vector<int> &get_vect() const { return vect; } };
Ceci est une rupture complète d'encapsulation.Citation:
Envoyé par Charlemagne
heu en fait j'ai oublié de preciser...mon prof veut pas qu'on utilise std ou mfc ou koi ke ce soit en fait ma classe resemblerais plutot a ça:
:mouarf: 8-) :? ;) :( :cry: :P :? :mouarf: 8-)Code:
1
2
3
4
5
6
7
8
9 classe B { public: ... private: ... objet_A* tab; };
Code:
1
2 const type & getObj(int index) const { return tab[index]; } type getObj(int index) const { return tab[index]; }
tu adaptes...Citation:
heu en fait j'ai oublié de preciser...mon prof veut pas qu'on utilise std ou mfc ou koi ke ce soit
Je ne suis pas (entièrement) d'accord.Citation:
Ceci est une rupture complète d'encapsulation.
En extrapolant tes dires, toute autre fonction accedant au contenu d'une classe serait également une rupture de l'encapsulation.
L'essentiel pour moi, c'est que l'utilisateur ne soit pas obliger de connaitre le (vrai) type des données membres, du moment qu'il applique les bonnes fonctions sur celles ci.
Dans mon exemple, la fonction get_vect aurait pu faire autre chose que de renvoyer une simple référence si les données avait été codées différemment.
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 class A { private: vector<int> vect; public: vector<int> &get_vect() { return vect; } const vector<int> &get_vect() const { return vect; } }; class A { private: int v0,v1,v2; public: vector<int> get_vect() const { vector<int> V(3); V[0]=V0; V[1]=V1; V[2]=V2; return V; } }; class A { private: int *p; size_n n; public: vector<int> get_vect() const { vector<int> V(n); ... return V; } };
heu...charlemagne a qui tu parle la??? :? quelqu'un a edité mon post a mon insu???
heu...ce que tu propose la bigboomshakala c'est l'operateur crochet...( en supposant que mon tableau ne soit plus privé ) c'est pas tres "esthetique" ...Citation:
Code :
const type & getObj(int index) const { return tab[index]; }type getObj(int index) const { return tab[index]; }
ça répond pourtant à la question... :DCitation:
Envoyé par jadey
ah ? et depuis quand ?Citation:
c'est pas tres "esthetique"
oui oui effectivement ça repond a mon probleme mais bon...c'est tiré par les cheveux comme soluce autant rendre le tableau public merci quand meme c'est pour ta solution que j'opte :mouarf: 8-) 8-) 8-) :) :mouarf: :? 8-)
:cry: ce n'est pas tiré par les cheveux, c'est un bête accesseur/getter.Citation:
Envoyé par jadey
non. l'accesseur GetToto te permet d'atteindre l'élément n, mais ne dévoile pas la structure. tu peux utiliser un tableau, un pointeur, un vecteur, un switch (cas 1 je renvoie var41, cas 2 je renvoie var7 ...) ou ce que tu veux qui peut être indexé.Code:autant rendre le tableau public
heu...j'arrive plus a trouver l'onglet "marquer comme resolu" depuis que l'interface du forum a changé...8-)
En haut à droite, menu "Outils de la discussion".