set & get

set & get - C++ - Programmation

Marsh Posté le 16-04-2012 à 03:11:55    

Salut tout le monde , svp pouvez vous m'aider : je veux avoir une idèe à propos les fonctions 'set ' and 'get' en C++ , je doit l'utiliser dans mon projet c++ , pourtant on ne l'a pas rencontré dans les sèances de cours  :pfff:  
NB : svp je ne veux pas des messages de genre "nous sommes pas là pour faire votre boulot ....  " [c'est assez frèquent] tout ce que je demande est de savoir de quoi s'agit ceci pour que je puisse entammer le travail :)  

Reply

Marsh Posté le 16-04-2012 à 03:11:55   

Reply

Marsh Posté le 16-04-2012 à 04:14:17    

C'est par rapport au classes, pour modifier/récupérer des variables private (ou alors aucun rapport :D)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 16-04-2012 à 04:25:34    

Terminapor a écrit :

C'est par rapport au classes, pour modifier/récupérer des variables private (ou alors aucun rapport :D)


merci mais je n'ai pas compris !  :ouch:

Reply

Marsh Posté le 16-04-2012 à 05:00:09    

Quand tu as une classe, ses attributs (variables) sont en général placés en private, c-a-d que seule une instance de cette classe peut modifier ces variables.
Le principe c'est de créer des accesseurs (fonctions tout bête) qui permettent de récupérer les valeurs de ces variables privées (get), ou de les modifier (set)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 25-04-2012 à 17:04:36    

je ne sais pas si c'est toujours d'actu, mais on parle de méthode get/set ou d'accesseurs (accessors) voire de gettor/settor quand il s'agit d'ajouter les méthodes d'accès en lecture (get) et écriture (set) à un attribut d'une classe.
 
A noter qu'il y a un set/get pour CHAQUE attribut et que les noms des méthodes seront du genre :
 

Code :
  1. void setMonAttributA(const TypeA &val)
  2. const TypeA &getMonAttributA() const
  3. void setMonAttributB(const TypeB &val)
  4. const TypeB &getMonAttributB() const

Message cité 1 fois
Message édité par Malkav le 25-04-2012 à 17:06:11

---------------
Mes feedbacks * Ma galerie photo
Reply

Marsh Posté le 25-04-2012 à 18:32:13    

Malkav a écrit :

je ne sais pas si c'est toujours d'actu, mais on parle de méthode get/set ou d'accesseurs (accessors) voire de gettor/settor quand il s'agit d'ajouter les méthodes d'accès en lecture (get) et écriture (set) à un attribut d'une classe.
 
A noter qu'il y a un set/get pour CHAQUE attribut et que les noms des méthodes seront du genre :
 

Code :
  1. void setMonAttributA(const TypeA &val)
  2. const TypeA &getMonAttributA() const
  3. void setMonAttributB(const TypeB &val)
  4. const TypeB &getMonAttributB() const



 
getter/setter.
 
En général, en C++, on utilise plutôt la surcharge de const pour ce genre de fonctionnalité :
 

Code :
  1. TypeA& AttributA() { return attributA; }
  2. const TypeA& AttributA() const { return attributA; }


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

Marsh Posté le 06-05-2012 à 09:50:27    

theshockwave a écrit :


 
getter/setter.
 
En général, en C++, on utilise plutôt la surcharge de const pour ce genre de fonctionnalité :
 

Code :
  1. TypeA& AttributA() { return attributA; }
  2. const TypeA& AttributA() const { return attributA; }



 
Quel est l’intérêt de ce genre de fonctions, par rapport à rendre publique le membre ?


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 06-05-2012 à 16:05:45    

I_m_back a écrit :

Quel est l’intérêt de ce genre de fonctions, par rapport à rendre publique le membre ?


 
Juste ce qui me vient à l'esprit là :
Robustesse vis-à-vis du futur: Dans le cas d'utilisation général, c'est inliné donc ca ne change strictement rien. Si un jour, tu déplaces ce membre dans une autre classe ou autre, ton interface n'a pas changé, ton code client n'a pas besoin d'être modifié.
Facilité de debug ou de monitoring de ta variable ...
 
Après, ca reste un système de getter/setter et je vais pas en vanter les mérites. [:jagstang]


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

Marsh Posté le 06-05-2012 à 17:45:46    

Ensuite, si tu as une classe remplie de ste/get c'ets que sa semantique est foireuse. Une classe doit proposer un *contrat* implanter dans son *interface* et non pas etre vu comme un simple tas de variables.  
 
Si tu as besoin d'un tas de valeurs coalescer sans semantqieu, une structure avec membre publique suffit.

Reply

Marsh Posté le 06-05-2012 à 22:08:24    

Ma question n'étais pas totalement innocente :
 
En retournant directement une référence sur la variable membre (pour le setter), tu interdis de fais un contrôle sur les valeurs que peuvent prendre ce membre.
 
Pour moi au final, avoir ce genre d'interface revient exactement à rendre publique le membre, à part effectivement de te laisser la possibilité de le renommer (la belle affaire :) )
 
En gros, ce que je veux dire et la question que je me pose, c'est pourquoi tu dis qu'en C++, c'est ce genre d'interface qui est faite plutôt qu'un getX et setX (que j'aurais plutôt tendance à proposer)

Message cité 1 fois
Message édité par I_m_back le 06-05-2012 à 22:10:21

---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 06-05-2012 à 22:08:24   

Reply

Marsh Posté le 07-05-2012 à 12:55:13    

I_m_back a écrit :

Ma question n'étais pas totalement innocente :
 
En retournant directement une référence sur la variable membre (pour le setter), tu interdis de fais un contrôle sur les valeurs que peuvent prendre ce membre.
 
Pour moi au final, avoir ce genre d'interface revient exactement à rendre publique le membre, à part effectivement de te laisser la possibilité de le renommer (la belle affaire :) )
 
En gros, ce que je veux dire et la question que je me pose, c'est pourquoi tu dis qu'en C++, c'est ce genre d'interface qui est faite plutôt qu'un getX et setX (que j'aurais plutôt tendance à proposer)


 
Mon intervention était plutôt pour signaler une pratique courante que la défendre, donc je ne vais pas chercher à me faire l'avocat du diable.


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

Marsh Posté le 07-05-2012 à 18:05:01    

theshockwave a écrit :


 
Mon intervention était plutôt pour signaler une pratique courante que la défendre, donc je ne vais pas chercher à me faire l'avocat du diable.


 
Ok, note que je ne posais pas la question pour t'emmerder, je suis curieux de savoir pourquoi c'est répandu  :jap:


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 08-05-2012 à 00:12:04    

Bonsoir,
J'image que si un attribut a une plage de valeur autorisée restreinte par exemple, le setter int SetAttribut(int val) doit vérifier que val est dans la plage de valeur autorisée avant d'effectuer l'affectation:

Code :
  1. int maclasse::SetAttribut(int val)
  2. {
  3.      if (val >=maclasse::borneinf && val =< bornesup)
  4.            attribut = val
  5.      return attribut;
  6. }


---------------
Seul Google le sait...
Reply

Sujets relatifs:

Leave a Replay

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