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???
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.Envoyé par Charlemagne
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 classe B { public: ... private: ... objet_A* tab; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const type & getObj(int index) const { return tab[index]; } type getObj(int index) const { return tab[index]; }
tu adaptes...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.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 : 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 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" ...Code :
const type & getObj(int index) const { return tab[index]; }type getObj(int index) const { return tab[index]; }
ça répond pourtant à la question...Envoyé par jadey
ah ? et depuis quand ?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
ce n'est pas tiré par les cheveux, c'est un bête accesseur/getter.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 : Sélectionner tout - Visualiser dans une fenêtre à part autant rendre le tableau public
heu...j'arrive plus a trouver l'onglet "marquer comme resolu" depuis que l'interface du forum a changé...
En haut à droite, menu "Outils de la discussion".
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager