'const' a quoi sert ca sert dans une fonction - C++ - Programmation
Marsh Posté le 27-06-2003 à 01:05:16
Cela sert à indiquer que ta fonction ne va pas modifier ta classe.
C'est à dire que tu pourras faire ça :
Code :
|
Si ta fonction n'était pas déclarée const, tu ne pourrais pas l'appeler.
Marsh Posté le 27-06-2003 à 01:29:17
ouais mais si bouge le const des deux cote ca marche non ????
Code :
|
jvois pas trop linterer surtout que je le vois souvent avec des fct virtuelle pures
Marsh Posté le 27-06-2003 à 02:28:59
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.
Marsh Posté le 27-06-2003 à 11:24:38
Bah je parierais que ce const comme les autres ne protège rien..
Code :
|
Oui effectivement ça marche!!
Marsh Posté le 27-06-2003 à 11:26:36
H4dd3R a écrit : Bah je parierais que ce const comme les autres ne protège rien..
|
C sensé prouver quoi?
Marsh Posté le 27-06-2003 à 11:27:20
H4dd3R a écrit : Bah je parierais que ce const comme les autres ne protège rien..
|
super ton cast
Marsh Posté le 27-06-2003 à 11:29:24
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..
Marsh Posté le 27-06-2003 à 11:31:46
H4dd3R a écrit : |
gni ?
Marsh Posté le 27-06-2003 à 11:33:12
H4dd3R a écrit : |
C ne pas définir une fonction comme const qui empéche de l'appeler depuis un objet const.
Marsh Posté le 27-06-2003 à 11:48:18
j'ai pas tout lu, mais me semble qu'y a une autre utilité au const placé la :
Code :
|
a mon avis c'est la principale utilité du const placé ici, empecher la fct de modifier des membres de la classe.
Marsh Posté le 27-06-2003 à 11:51:21
Konar a écrit : j'ai pas tout lu, mais me semble qu'y a une autre utilité au const placé la :
|
Ben c innérant au concept de fonction const
On modifie pas l'object dans une méthode const, donc c les seules méthodes applicable à un objet const.
Marsh Posté le 27-06-2003 à 11:52:39
LetoII 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 !
Marsh Posté le 27-06-2003 à 11:54:06
Konar a écrit : |
Ben il contournait rien du tout
Marsh Posté le 27-06-2003 à 11:59:04
Bon ces koi ces gens qui poste n'importe quoi, sans avoir révisé avant ??
(comment ca je fais pareil des fois )
trop fort ces quiprocos (oui je sais pas l'écrire, et alors ) !!
Marsh Posté le 27-06-2003 à 12:01:27
LetoII 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..
Marsh Posté le 27-06-2003 à 12:06:58
H4dd3R 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.
Marsh Posté le 27-06-2003 à 12:14:02
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..
Marsh Posté le 27-06-2003 à 12:25:04
H4dd3R a écrit : |
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...
Marsh Posté le 27-06-2003 à 12:47:02
H4dd3R a écrit : |
Tu fais un cast "à la C" dans du C++, t'arriveras toujours à trouver des failles
Marsh Posté le 27-06-2003 à 12:51:07
Iblis666 a écrit : |
Code :
|
c'est nul le private ca protege rien
Marsh Posté le 27-06-2003 à 12:58:37
H4dd3R a écrit : |
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
Marsh Posté le 27-06-2003 à 12:59:34
ReplyMarsh Posté le 27-06-2003 à 13:01:19
ReplyMarsh Posté le 27-06-2003 à 13:05:24
ReplyMarsh Posté le 27-06-2003 à 13:07:23
chrisbk a écrit : |
très bon
Par contre "spa portable" comme dirait l'autre taze
Marsh Posté le 27-06-2003 à 22:15:05
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 :
|
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
Marsh Posté le 27-06-2003 à 22:32:37
legreg a écrit : |
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.
Marsh Posté le 30-06-2003 à 10:49:43
legreg a écrit : le const ce n'est pas une protection |
Merci..
Marsh Posté le 27-06-2003 à 00:56:54
par ex :
j'ai essaye sans et avec c la meme chose
Message édité par red faction le 27-06-2003 à 00:59:03