comment fait-on avec un getter pour accéder a un tableau en private ?

comment fait-on avec un getter pour accéder a un tableau en private ? - C++ - Programmation

Marsh Posté le 20-05-2003 à 19:31:23    

pour pouvoir l'utiliser ensuite en dehors des fonctions membres
merci.

Reply

Marsh Posté le 20-05-2003 à 19:31:23   

Reply

Marsh Posté le 20-05-2003 à 19:38:28    

Stune blague ce topic ?  :heink:  
=> tu renvoies simplement le pointeur du tableau (en const de préférence, ça fait plus joli)
OU
=> tu fais une méthode (const) qui renvoie la cellule correspondant à l'indice passé en paramètre.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 20-05-2003 à 19:43:00    

et le pointeur tu le déclare où ?
je précise que je suis débutant en C++, j'essai d'apprendre tout seul.

Reply

Marsh Posté le 20-05-2003 à 20:27:35    

Le pointeur est déclaré dans ta classe
 

Code :
  1. class ZeClass {
  2. private:
  3. int* monTableau;
  4. public:
  5. ZeClass();
  6. ~ZeClass();
  7. const int* getTableau() const { return monTableau; }
  8. }


 
en créant le tableau dans le constructeur avec new
et en détruisant le tableau dans le destructeur avec delete


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 20-05-2003 à 20:47:10    

(EDIT :t'aurais une façon plus simple, genre sans les const et avec un minimum de pointeurs pasque là chuis largué)
'tain je suis largué  :sweat:  
-tu as déclaré un pointeur au lieu du tableau, c normal ?
-a quoi servent les const ?
-pourquoi tu as mis une * après le int de la fonction ?
-le return, je l'affecte ensuite a un pointeur je suppose ?
merci.


Message édité par terminator_t800 le 20-05-2003 à 20:59:17
Reply

Marsh Posté le 20-05-2003 à 21:36:54    

terminator_T800 a écrit :


-tu as déclaré un pointeur au lieu du tableau, c normal ?


C'est pour faire des 'tableaux' dynamiques ...
 

terminator_T800 a écrit :


-a quoi servent les const ?


C'est pour dire que c'est constant ! :D
 

terminator_T800 a écrit :


-pourquoi tu as mis une * après le int de la fonction ?


Heuuuu ... 'int*', ca ne te rappelle rien ? C'est une déclaration de pointeur, ca marche aussi pour le type de retour de la fonction ...
 

terminator_T800 a écrit :


-le return, je l'affecte ensuite a un pointeur je suppose ?
merci.


Oui oui ...
 
Allez, j'ajoute ma pierre d'abstraction à l'édifice ...
 

Code :
  1. static const int NB_ELEMS = 10;
  2. class ZeClass {
  3. private:
  4.   int monTableau[NB_ELEMS];
  5. public:
  6.   ZeClass();
  7.   ~ZeClass();
  8.   inline const int* getTableau() const { return monTableau; } // Edit : Non, je n'ai pas fait de cast ... :D
  9. }

 
 
Je suppose que tu aurais préféré définir ton tableau de cette manière ... Tout dépend de l'utilité qu'a ton tableau par la suite ...


Message édité par theshockwave le 23-05-2003 à 11:34:54

---------------
last.fm
Reply

Marsh Posté le 20-05-2003 à 22:11:29    

merci pour tes réponses  :)

Reply

Marsh Posté le 20-05-2003 à 23:16:05    

Comme l'expliquait Tetragrammaton IHVH, tu fais un assesseur (ici = getTableau()) qui permet d'accéder à ton tableau (un tableau qui est en fait en quelque sorte un "pointeur constant" ).
Comme ça tu peux retourner ton attribut privé (le tableau) grâce à la méthode public crée (l'assesseur), voilà ;)
C'est vrai c'est très basic mais on est tous passé par là ...
Les codes proposés sont parfaits, rien à redire.


Message édité par pc2000 le 20-05-2003 à 23:20:33
Reply

Marsh Posté le 20-05-2003 à 23:33:03    

Tiens, un qui galère comme moi :D  
 
J'ai posé le même genre de questions ya quelque temps, voilà le topic:
 
http://forum.hardware.fr/forum2.ph [...] subcat=386
 
Bon courage!!


---------------
Another .Net Blog
Reply

Marsh Posté le 21-05-2003 à 08:57:03    

PC2000 a écrit :

(un tableau qui est en fait en quelque sorte un "pointeur constant" ).


 
Pourquoi "en quelque sorte" ? Exactement oui !

Reply

Marsh Posté le 21-05-2003 à 08:57:03   

Reply

Marsh Posté le 21-05-2003 à 11:20:09    

El_gringo a écrit :


 
Pourquoi "en quelque sorte" ? Exactement oui !


 
Il vaut mieux être clair sur la différence entre tableau et pointeur


---------------
last.fm
Reply

Marsh Posté le 21-05-2003 à 13:39:19    

theShOcKwAvE a écrit :


 
  inline const int* getTableau() const { return (int *)monTableau; }  
 


 
C'est quoi ce cast futuriste ?  :heink:  :heink:  :heink:  
A quoi sert de caster un "int*" vers un "int*" ?  :pt1cable:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 13:52:45    

theShOcKwAvE a écrit :


 
Il vaut mieux être clair sur la différence entre tableau et pointeur


 
Ha bon, et pourquoi ça ? Quelle différence d'ailleurs ?
A part à la déclaration, il n'y en a pas !

Reply

Marsh Posté le 21-05-2003 à 13:53:15    

Tetragrammaton IHVH a écrit :


 
C'est quoi ce cast futuriste ?  :heink:  :heink:  :heink:  
A quoi sert de caster un "int*" vers un "int*" ?  :pt1cable:  


 
Surtout que si on change le type de monTableau sans modifier la fonction et bien le compilateur ne vera aucune erreur. Il faut eviter au maximum les cast "sauvages" en C++ ( sinon on fait du C ).

Reply

Marsh Posté le 21-05-2003 à 13:54:42    

Tetragrammaton IHVH a écrit :


 
C'est quoi ce cast futuriste ?  :heink:  :heink:  :heink:  
A quoi sert de caster un "int*" vers un "int*" ?  :pt1cable:  


 
...il ne comprend pas qu'un tableau C'EST un pointeur ! :D
D'ailleurs, s'il tient à tout prix à faire un cast (inutile, ms bon...), mieux vaut faire :

Code :
  1. inline const int* getTableau() const { return (const int *)monTableau; }

Reply

Marsh Posté le 21-05-2003 à 14:07:31    

seblamb a écrit :


 
Surtout que si on change le type de monTableau sans modifier la fonction et bien le compilateur ne vera aucune erreur. Il faut eviter au maximum les cast "sauvages" en C++ ( sinon on fait du C ).


 
J'incrémente à fond :jap:  


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 22:14:00    

El_gringo a écrit :


 
Ha bon, et pourquoi ça ? Quelle différence d'ailleurs ?
A part à la déclaration, il n'y en a pas !


Il y a une différence entre pointeur et tableau uniquement dans la déclaration (après un tableau est un pointeur).
En plus cette notion de pointeur est assez difficile à assimiler chez les débutants (j'ai eu un peu de mal à comprendre au début) donc j'essayais de ne pas l'embrouiller davantage ;)

Reply

Marsh Posté le 22-05-2003 à 00:15:49    

Tetragrammaton IHVH a écrit :


=> tu renvoies simplement le pointeur du tableau (en const de préférence, ça fait plus joli)
OU
=> tu fais une méthode (const) qui renvoie la cellule correspondant à l'indice passé en paramètre.


 
Une surcharge de l'operateur [], ca marche meme pour les tableaux a 2 dimensions ca donne un truc du genre:
 

Code :
  1. private:
  2. int _graph[arraySize][_matrixLength];
  3. public:
  4. /**
  5. * allow to use the Graph class like a matrix: graph[i][j] for example
  6. */
  7. const int * operator[] (unsigned int i) const { return _graph[i]; }


 
Ce qui est cool avec cette solution c'est que on peut changer la variable privee d'une matrix [][] en un vector, list ou n'importe quoi d'autre sans pour autant chenger le code qui utilise la classe. On doit juste changer la surcharge de l'operateur []. En gros ca encapsule plus, et c'est ce qu'on veut avec la programmation object :D

Reply

Marsh Posté le 22-05-2003 à 13:25:26    

oui, effectivement, je devais être un peu (très ?) fatigué ce soir là ....
 
C'est vrai que le cast n'est pas beau, surtout qu'on n'en a pas besoin, effectivement ... (j'ai vraiment fumé ce soir là ! :D)
 
Je suis d'accord sur le fait qu'un tableau n'est qu'une adresse à l'exec, mais par contre, ca n'a rien à voir au niveau de la compilation ... [:arrakis99] un tableau n'est pas une l-value ...


---------------
last.fm
Reply

Marsh Posté le 22-05-2003 à 17:49:59    

PC2000 a écrit :

Comme l'expliquait Tetragrammaton IHVH, tu fais un assesseur (ici = getTableau()) ...


(Vraie) question de vocabulaire...
 
Je sais, je dérive du topic initial, mais c'est bien la première fois que je rencontre ce mot : "assesseur". Jusqu'à présent, j'avais toujours entendu "accesseur" (prononcé "ax-cè-seur" ), bien qu'il s'agisse d'un anglicisme.
Vous avez entendu vos profs utiliser ce mot ? (et si oui, vous êtes nombreux dans ce cas ?)
 
Je suis d'autant plus surpris qu'en français, normalement, l'"assesseur", c'est celui qui "s'asseoit", ou qui "est assis". Rien à voir donc avec celui qui "donne accès", donc.

Reply

Marsh Posté le 22-05-2003 à 17:52:41    

BifaceMcLeOD a écrit :


(Vraie) question de vocabulaire...
 
Je sais, je dérive du topic initial, mais c'est bien la première fois que je rencontre ce mot : "assesseur". Jusqu'à présent, j'avais toujours entendu "accesseur" (prononcé "ax-cè-seur" ), bien qu'il s'agisse d'un anglicisme.


 
oui c'est accesseur  :jap:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 22-05-2003 à 18:28:40    

Ah, OK. Le clavier de PC2000 a dû zozoter, alors... :D

Reply

Marsh Posté le 22-05-2003 à 23:23:28    

BifaceMcLeOD a écrit :


(Vraie) question de vocabulaire...
 
Je sais, je dérive du topic initial, mais c'est bien la première fois que je rencontre ce mot : "assesseur". Jusqu'à présent, j'avais toujours entendu "accesseur" (prononcé "ax-cè-seur" ), bien qu'il s'agisse d'un anglicisme.
Vous avez entendu vos profs utiliser ce mot ? (et si oui, vous êtes nombreux dans ce cas ?)
 
Je suis d'autant plus surpris qu'en français, normalement, l'"assesseur", c'est celui qui "s'asseoit", ou qui "est assis". Rien à voir donc avec celui qui "donne accès", donc.


Oui je confonds les deux, ce n'est pas rare que je me fasse corriger, je sais pas pourquoi je le prononce bien mais je mets 2 s  :D


Message édité par pc2000 le 22-05-2003 à 23:26:14
Reply

Marsh Posté le 23-05-2003 à 09:10:17    

Tetragrammaton IHVH a écrit :


 
oui c'est accesseur  :jap:  


 
C'est accesseur, mais prononcé [assesseur]...

Reply

Marsh Posté le 23-05-2003 à 11:15:05    

qu'il est laid ce cast C  :fou:

Reply

Marsh Posté le 23-05-2003 à 11:35:07    

++Taz a écrit :

qu'il est laid ce cast C  :fou:  


 
:whistle:


---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 11:40:16    

j'ai décidé de m'attaquer à ce problème: à moins que les gens utilisent ça en cachette, je vois de mon en moins de char* et FILE*, meme Joce utilise STL
 
mais y a encore beaucoup à faire, ma prochaine mission, c'est de faire la chasse au cast C. si j'ai le temps, fodrait que je fasse un topic dessus
 
tremblez [:samduloft]  :D

Reply

Marsh Posté le 23-05-2003 à 11:50:02    

++Taz a écrit :

j'ai décidé de m'attaquer à ce problème: à moins que les gens utilisent ça en cachette, je vois de mon en moins de char* et FILE*, meme Joce utilise STL
 
mais y a encore beaucoup à faire, ma prochaine mission, c'est de faire la chasse au cast C. si j'ai le temps, fodrait que je fasse un topic dessus
 
tremblez [:samduloft]  :D  


 
(je dois bien admettre que c'est un mauvais réflexe qu'on choppe très vite ... D'autant plus que c'est plus facile à taper que static_cast<int*> par exemple ... :D)


---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 13:40:27    

++Taz a écrit :

j'ai décidé de m'attaquer à ce problème: à moins que les gens utilisent ça en cachette, je vois de mon en moins de char* et FILE*, meme Joce utilise STL
 
mais y a encore beaucoup à faire, ma prochaine mission, c'est de faire la chasse au cast C. si j'ai le temps, fodrait que je fasse un topic dessus
 
tremblez [:samduloft]  :D  


 
t'es mal barré pour ceux ki font du win32... ca cast dans tous les sens, et y a pas moyen ke je mette des static_cast ou autres, ca rendrait trop le code incomprehensible.
 
de plus dans les msdn c'est fait comme ca (C oblige), donc la plupart des gens suivront l'exemple...

Reply

Marsh Posté le 23-05-2003 à 13:45:30    

Konar a écrit :


 
t'es mal barré pour ceux ki font du win32... ca cast dans tous les sens, et y a pas moyen ke je mette des static_cast ou autres, ca rendrait trop le code incomprehensible.
 
de plus dans les msdn c'est fait comme ca (C oblige), donc la plupart des gens suivront l'exemple...
 


 
(effectivement ... syntaxiquement parlant, les docs MS sont en général entre le C et le C++ ...)


---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 13:49:44    

El_gringo a écrit :


 
C'est accesseur, mais prononcé [assesseur]...


 
????  :pt1cable:  
 
Tu prononces "asséder" au lieu d'accéder ? :lol:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 23-05-2003 à 15:03:05    

theShOcKwAvE a écrit :


 
(effectivement ... syntaxiquement parlant, les docs MS sont en général entre le C et le C++ ...)


 
toutes les fct win32 de base sont en C (ie les exemples sont fait pour marcher en C), mais sont utilisées dans bcp de progs C++, donc forcement...

Reply

Marsh Posté le 23-05-2003 à 15:10:26    

Konar a écrit :


 
toutes les fct win32 de base sont en C (ie les exemples sont fait pour marcher en C), mais sont utilisées dans bcp de progs C++, donc forcement...  


 
Pour DirectX, certains exemples sont en C++ puisqu'ils passent par les méthodes des objets directement, sans passer par une forme du style monobj->vtable->mamethode ... Et pourtant, le reste du code est en 100% C ...
(à moins que ce soit possible de faire l'appel à la méthode sans passer par vtable en C, mais ca ne marche pas sous Visual, dans ce cas là)
 
Edit : fautes de frappe


Message édité par theshockwave le 23-05-2003 à 15:11:04

---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 15:12:22    

Tetragrammaton IHVH a écrit :


 
????  :pt1cable:  
 
Tu prononces "asséder" au lieu d'accéder ? :lol:


 
ça vient pas du mot accèder couillon

Reply

Marsh Posté le 23-05-2003 à 15:17:08    

El_gringo a écrit :


 
ça vient pas du mot accèder couillon


 
:heink: et ca vient d'où, alors ?


---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 15:27:06    

theShOcKwAvE a écrit :


 
:heink: et ca vient d'où, alors ?


 
Je sais pas. Mais d'ailleurs, ça s'écrit "assesseur"

Reply

Marsh Posté le 23-05-2003 à 15:38:55    

El_gringo a écrit :


 
Je sais pas. Mais d'ailleurs, ça s'écrit "assesseur"


 
Assesseur : n.m. (latin : assessor, celui qui aide, conseille)
1. Juge qui assiste le président du tribunal et délibère avec lui
2. Nom donné aux membres de certaines juridictions d'exceptions (tribunaux paritaires des baux ruraux, tribunaux maritimes commerciaux ...) ou aux membres de bureaux d'assemblées électorales, etc.
3. Chez les romains, jurisconsulte qui avait pour mission d'éclairer les magistrats en vue de leur décisions.
4. Sous l'Ancien Régime, juge qui suppléait le chef de la juridiction ou officier de justice adjoint qui assistait les juges.

 
Ca me semble un peu hors sujet ...
Voyons Accesseur, maintenant : Surprise, il n'est pas dans mon encyclopédie ...
MAis quoiqu'il arrive, je continuerai d'utiliser "accesseur", car éthymologiquement, c'est ce qui colle le plus à la fonctionnalité de la dite méthode ...


---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 15:54:47    

theShOcKwAvE a écrit :


 
Assesseur : n.m. (latin : assessor, celui qui aide, conseille)
1. Juge qui assiste le président du tribunal et délibère avec lui
2. Nom donné aux membres de certaines juridictions d'exceptions (tribunaux paritaires des baux ruraux, tribunaux maritimes commerciaux ...) ou aux membres de bureaux d'assemblées électorales, etc.
3. Chez les romains, jurisconsulte qui avait pour mission d'éclairer les magistrats en vue de leur décisions.
4. Sous l'Ancien Régime, juge qui suppléait le chef de la juridiction ou officier de justice adjoint qui assistait les juges.

 
Ca me semble un peu hors sujet ...
Voyons Accesseur, maintenant : Surprise, il n'est pas dans mon encyclopédie ...
MAis quoiqu'il arrive, je continuerai d'utiliser "accesseur", car éthymologiquement, c'est ce qui colle le plus à la fonctionnalité de la dite méthode ...


 
...Ben, tu fais ta vie hein!
Cela dit, tu te plantes, et choisis de continuer à te planter. C vrai que j'ai aucun argument. Une personne de confiance me l'a assuré, c tout.

Reply

Marsh Posté le 23-05-2003 à 15:57:08    

El_gringo a écrit :


 
...Ben, tu fais ta vie hein!
Cela dit, tu te plantes, et choisis de continuer à te planter. C vrai que j'ai aucun argument. Une personne de confiance me l'a assuré, c tout.


 
c'est le genre de personnes qui t'assure qu'on doit écrire cédérom ? :D
 
Edit : Et Sélecteur, ca vous plait pas, comme mot ? :D


Message édité par theshockwave le 23-05-2003 à 16:04:54

---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 16:30:06    

theShOcKwAvE a écrit :


 
c'est le genre de personnes qui t'assure qu'on doit écrire cédérom ? :D
 
Edit : Et Sélecteur, ca vous plait pas, comme mot ? :D


 
Non, justement, c'est l'genre de personne qui dis pas de conneries.
 
EDIT : On dit Selector, pas sélecteur !
 
:D


Message édité par El_gringo le 23-05-2003 à 16:30:44
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed