Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1173 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  'const' a quoi sert ca sert dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

'const' a quoi sert ca sert dans une fonction

n°441075
red factio​n
Posté le 27-06-2003 à 00:56:54  profilanswer
 

par ex :
 
 

Code :
  1. void saisie(istream& )const;


 
 
j'ai essaye sans et avec c la meme chose
 
 [:yamusha]


Message édité par red faction le 27-06-2003 à 00:59:03
mood
Publicité
Posté le 27-06-2003 à 00:56:54  profilanswer
 

n°441078
gatorette
Posté le 27-06-2003 à 01:05:16  profilanswer
 

Cela sert à indiquer que ta fonction ne va pas modifier ta classe.
C'est à dire que tu pourras faire ça :

Code :
  1. class Foo
  2. {
  3. void Bar() const;
  4. };
  5. int main( int argc, char *argv[] )
  6. {
  7. const Foo f;
  8. f.Bar();
  9. return 0;
  10. }


 
Si ta fonction n'était pas déclarée const, tu ne pourrais pas l'appeler.


---------------
each day I don't die is cheating
n°441089
red factio​n
Posté le 27-06-2003 à 01:29:17  profilanswer
 

ouais mais si bouge le const des deux cote ca marche non ????
 
 

Code :
  1. class Foo
  2.   {
  3.     void Bar();
  4.   };
  5.  
  6.   int main( int argc, char *argv[] )
  7.   {
  8.     Foo f;
  9.     f.Bar();
  10.     return 0;
  11.   }


 
 
jvois pas trop linterer surtout que je le vois souvent avec des fct virtuelle pures

n°441095
red factio​n
Posté le 27-06-2003 à 01:45:22  profilanswer
 

ouais bon j'ai rien dit

n°441103
nraynaud
lol
Posté le 27-06-2003 à 02:28:59  profilanswer
 

Pour enfoncer le clou, c'est pour des fonctions de consultation de l'objet, on matte mais on touche pas. A noter que cette interdiction de toucher est absolue ce qui veut dire que si le résultat a été calculé, il ne peut être mis en cache dans l'objet même si la modif n'aurait pas été visible depuis l'extérieur.
 
Voir la programmation par contrats et Eiffel pour un système plus fin où l'on dit : "je ne fait aucune modification visible de l'extérieur" mais où on peut modifier la partie invisible de l'objet (comme par exemple mettre un résultat calculé dans un cache). Bien entendu on peut aussi s'engager à ne pas non plus toucher à l'état interne.

n°441492
H4dd3R
Q2
Posté le 27-06-2003 à 11:24:38  profilanswer
 

Bah je parierais que ce const comme les autres ne protège rien..
 

Code :
  1. class Foo
  2. {
  3. void Bar() const;
  4. };
  5. int main( int argc, char *argv[] )
  6. {
  7. Foo f;
  8. const Foo* _cf=(const Foo*)&f;
  9. _cf->Bar();
  10. return 0;
  11. }


Oui effectivement ça marche!! ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°441498
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 11:26:36  profilanswer
 

H4dd3R a écrit :

Bah je parierais que ce const comme les autres ne protège rien..
 

Code :
  1. class Foo
  2. {
  3. void Bar() const;
  4. };
  5. int main( int argc, char *argv[] )
  6. {
  7. Foo f;
  8. const Foo* _cf=(const Foo*)&f;
  9. _cf->Bar();
  10. return 0;
  11. }


Oui effectivement ça marche!! ;)


 
C sensé prouver quoi?


---------------
Le Tyran
n°441499
chrisbk
-
Posté le 27-06-2003 à 11:27:20  profilanswer
 

H4dd3R a écrit :

Bah je parierais que ce const comme les autres ne protège rien..
 

Code :
  1. class Foo
  2. {
  3. void Bar() const;
  4. };
  5. int main( int argc, char *argv[] )
  6. {
  7. Foo f;
  8. const Foo* _cf=(const Foo*)&f;
  9. _cf->Bar();
  10. return 0;
  11. }


Oui effectivement ça marche!! ;)


 
super ton cast :D

n°441510
H4dd3R
Q2
Posté le 27-06-2003 à 11:29:24  profilanswer
 

LetoII a écrit :

C sensé prouver quoi?


Ben que définir une fct const n'empêchera jamais un utilisateur de ta classe de l'appeler depuis un objet non const..


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°441518
chrisbk
-
Posté le 27-06-2003 à 11:31:46  profilanswer
 

H4dd3R a écrit :


Ben que définir une fct const n'empêchera jamais un utilisateur de ta classe de l'appeler depuis un objet non const..


gni ?

mood
Publicité
Posté le 27-06-2003 à 11:31:46  profilanswer
 

n°441522
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 11:33:12  profilanswer
 

H4dd3R a écrit :


Ben que définir une fct const n'empêchera jamais un utilisateur de ta classe de l'appeler depuis un objet non const..


 
 [:fuel]  
C ne pas définir une fonction comme const qui empéche de l'appeler depuis un objet const.


Message édité par LetoII le 27-06-2003 à 11:37:45

---------------
Le Tyran
n°441582
Konar
Posté le 27-06-2003 à 11:48:18  profilanswer
 

j'ai pas tout lu, mais me semble qu'y a une autre utilité au const placé la :
 

Code :
  1. class A
  2. {
  3. public:
  4.   int m_truc;
  5.   void fct(int i) const { m_truc = i; } // ne compile pas a cause du const
  6. }


 
a mon avis c'est la principale utilité du const placé ici, empecher la fct de modifier des membres de la classe.

n°441589
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 11:51:21  profilanswer
 

Konar a écrit :

j'ai pas tout lu, mais me semble qu'y a une autre utilité au const placé la :
 

Code :
  1. class A
  2. {
  3. public:
  4.   int m_truc;
  5.   void fct(int i) const { m_truc = i; } // ne compile pas a cause du const
  6. }


 
a mon avis c'est la principale utilité du const placé ici, empecher la fct de modifier des membres de la classe.


 
Ben c innérant au concept de fonction const  [:spamafote]  
On modifie pas l'object dans une méthode const, donc c les seules méthodes applicable à un objet const.


---------------
Le Tyran
n°441591
Konar
Posté le 27-06-2003 à 11:52:39  profilanswer
 

LetoII a écrit :


 
Ben c innérant au concept de fonction const  [:spamafote]  
On modifie pas l'object dans une méthode const, donc c les seules méthodes applicable à un objet const.


 
ouais mais avec cette approche, l'autre pourra pas contourner le const avec un cast a la con, et dire que ca sert a rien les const.
 
les const c'est la vie !

n°441594
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 11:54:06  profilanswer
 

Konar a écrit :


 
ouais mais avec cette approche, l'autre pourra pas contourner le const avec un cast a la con, et dire que ca sert a rien les const.
 
les const c'est la vie !


 
Ben il contournait rien du tout [:spamafote]


---------------
Le Tyran
n°441596
bobuse
Posté le 27-06-2003 à 11:59:04  profilanswer
 

:lol:
 
Bon ces koi ces gens qui poste n'importe quoi, sans avoir révisé avant ??
(comment ca je fais pareil des fois :ange: )
 
 :lol:  [:666rip666] trop fort ces quiprocos (oui je sais pas l'écrire, et alors :o ) !!


---------------
get amaroK plugin
n°441600
H4dd3R
Q2
Posté le 27-06-2003 à 12:01:27  profilanswer
 

LetoII a écrit :


Ben il contournait rien du tout [:spamafote]  


Prenons un exemple concret.. :)
 
Tu es créateur d'une classe et moi utilisateur de cette classe.
Montres moi ce que tui penses protéger ds ta classe avec un const, et je verrai si je peux passer outre, en tant qu'utilisateur qui instancie ta classe..
 
En gros j'ai tjrs jamais vu un cas ou un const avait la moindre utilité.. Alors si on peut m'en montrer un..  :hello:


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°441603
Konar
Posté le 27-06-2003 à 12:06:58  profilanswer
 

H4dd3R a écrit :


Prenons un exemple concret.. :)
 
Tu es créateur d'une classe et moi utilisateur de cette classe.
Montres moi ce que tui penses protéger ds ta classe avec un const, et je verrai si je peux passer outre, en tant qu'utilisateur qui instancie ta classe..
 
En gros j'ai tjrs jamais vu un cas ou un const avait la moindre utilité.. Alors si on peut m'en montrer un..  :hello:  


 
pour reprendre ton exemeple, je suis créateur d'une classe, toi utilisateur. j'ai pas envie que tu modifies certains membres, paske j'estimes que t'en a pas besoin. je met donc des const la ou il faut. tu fais des cast débiles de partout pour avoir finalement acces a ces membres. au final le proj a des ratances, apres 2 semaines on se rend compte que c'est ta faute, de ton utilisation maladroite de certains membres. tout le monde te remercie, et te dit au revoir a jamais.

n°441609
H4dd3R
Q2
Posté le 27-06-2003 à 12:14:02  profilanswer
 

Konar a écrit :

pour reprendre ton exemeple, je suis créateur d'une classe, toi utilisateur. j'ai pas envie que tu modifies certains membres, paske j'estimes que t'en a pas besoin. je met donc des const la ou il faut. tu fais des cast débiles de partout pour avoir finalement acces a ces membres. au final le proj a des ratances, apres 2 semaines on se rend compte que c'est ta faute, de ton utilisation maladroite de certains membres. tout le monde te remercie, et te dit au revoir a jamais.


Non je dois reconnaitre ma mauvaise foi.. Le const sert à prévenir d'utilisateur de la classe que son auteur ne souhaite pas qu'il change tel ou tel morceau..
Je trouve par contre abusif de dire que le const empêche ou protège l'accès (et pourtant on trouve ça ds la doc)..
De même je trouve risqué de la part du concepteur de la classe de considérer que l'utilisateur ne pourra pas faire de modifs..
 
Sans rancune..  :)


Message édité par H4dd3R le 27-06-2003 à 12:15:41

---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°441618
Ace17
Posté le 27-06-2003 à 12:25:04  profilanswer
 

H4dd3R a écrit :


De même je trouve risqué de la part du concepteur de la classe de considérer que l'utilisateur ne pourra pas faire de modifs..


 
Il faut faire cette hypothese... parce que sinon tu peux supposer pleins de trucs contre lesquels tu ne peux rien... Tu peux toujours  modifier la mémoire comme un porc aussi...

n°441660
Iblis666
Il est tout vert...
Posté le 27-06-2003 à 12:47:02  profilanswer
 

H4dd3R a écrit :


 
En gros j'ai tjrs jamais vu un cas ou un const avait la moindre utilité.. Alors si on peut m'en montrer un..  :hello:  


 
Tu fais un cast "à la C" dans du C++, t'arriveras toujours à trouver des failles  :sarcastic:

n°441667
chrisbk
-
Posté le 27-06-2003 à 12:51:07  profilanswer
 

Iblis666 a écrit :


 
Tu fais un cast "à la C" dans du C++, t'arriveras toujours à trouver des failles  :sarcastic:  


 

Code :
  1. class toto
  2. {
  3. public:
  4. toto();
  5. virtual ~toto();
  6. private:
  7. int a;
  8. };
  9. void main
  10. {
  11. toto truc;
  12. int * c = ((int *)&truc )+ 1 ;
  13. *c = 20;
  14. }


c'est nul le private ca protege rien :O

n°441682
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 12:58:37  profilanswer
 

H4dd3R a écrit :


Prenons un exemple concret.. :)
 
Tu es créateur d'une classe et moi utilisateur de cette classe.
Montres moi ce que tui penses protéger ds ta classe avec un const, et je verrai si je peux passer outre, en tant qu'utilisateur qui instancie ta classe..
 
En gros j'ai tjrs jamais vu un cas ou un const avait la moindre utilité.. Alors si on peut m'en montrer un..  :hello:  


 
C pas une question de protection c une question de conception. Pour que les choses se passent bien dans le programme faut que ça marche comme ça, si tu passe outre c à tes risques est périles [:spamafote]


Message édité par LetoII le 27-06-2003 à 13:00:49

---------------
Le Tyran
n°441684
chrisbk
-
Posté le 27-06-2003 à 12:59:34  profilanswer
 

LetoII a écrit :


 
C pas une question de protection c une question de protection.  


 
[:gratgrat] [:meganne]

n°441686
LetoII
Le dormeur doit se réveiller
Posté le 27-06-2003 à 13:01:19  profilanswer
 


 
Bon arréte de modiifer le texte quand tu quote  :whistle:


---------------
Le Tyran
n°441693
Ace17
Posté le 27-06-2003 à 13:05:24  profilanswer
 

LetoII a écrit :


 
Bon arréte de modiifer le texte quand tu quote  :whistle:  


 
Désmaqué  :lol:

n°441694
Iblis666
Il est tout vert...
Posté le 27-06-2003 à 13:07:23  profilanswer
 

chrisbk a écrit :


c'est nul le private ca protege rien :O
 


 
très bon :D  
Par contre "spa portable" comme dirait l'autre taze :o
 


Message édité par Iblis666 le 27-06-2003 à 13:26:03
n°442315
LeGreg
Posté le 27-06-2003 à 22:15:05  profilanswer
 

le const ce n'est pas une protection  
c'est une aide de programmation
comme private, comme l'heritage, les
destructeurs virtuels etc..
si tu es trop con pour ne pas savoir comment
l'utiliser ne l'utilise pas..
(rque pour Hadder)
 
un objet peut tres bien etre accede en const d'un cote et ne pas etre const de l'autre.
 
Comme ici:

Code :
  1. class foo
  2. {
  3.    void bar(const &foo);
  4. }
  5. foo toto;
  6. toto.bar(toto);


 
Ce n'est pas le probleme.
Evidemment vouloir utiliser des const sans devoir
utiliser un const_cast a tout bout de champ
ca demande de se casser un peu plus la tete pour designer
un programme mais c'est a ça que ça sert (se casser la tete pour au final avoir un meilleur design un programme qui marche presque du premier coup (ca par contre ce n'est pas gagné) ).
 
pour nraynaud et sa remarque sur le cache:
c'est à ça que sert le mot clé mutable.
 
LeGreg

n°442320
nraynaud
lol
Posté le 27-06-2003 à 22:32:37  profilanswer
 

legreg a écrit :


pour nraynaud et sa remarque sur le cache:
c'est à ça que sert le mot clé mutable.


Effectivement, je connaissais pas.
http://msdn.microsoft.com/library/ [...] frame=true
 
Par contre c'est portes ouverte, n'importe qui (enfin, n'importe quelle méthode) fait n'importe quoi sur un mutable.  
Ça reste grossier (bien que moins que ce que je pensais) face à un contrat.

n°443785
H4dd3R
Q2
Posté le 30-06-2003 à 10:49:43  profilanswer
 

legreg a écrit :

le const ce n'est pas une protection  
c'est une aide de programmation
comme private, comme l'heritage, les
destructeurs virtuels etc..
si tu es trop con pour ne pas savoir comment
l'utiliser ne l'utilise pas..
(rque pour Hadder)


Merci..


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  'const' a quoi sert ca sert dans une fonction

 

Sujets relatifs
[PHP] fonction split et exp regFonction équivalente au decode de Oracle?
Fonction SaveToFileFonction trim ?
[Fonction WEB] Exemple site Msn.fr : News défilantesExiste t'il en C un fonction md5() comme en PHP
[PHP] Passer un paramètre à une fonctiona quoi sert register_globals???
La fonction confirm en JavaScript ?question sur les const &
Plus de sujets relatifs à : 'const' a quoi sert ca sert dans une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR