paramètre "const" - C++ - Programmation
Marsh Posté le 26-05-2006 à 11:21:02
const, est équivalent de final en java.
donc, tu ne peut pas modifier (affectations: = += *= ...) une variable <<const>>, seulement l'initialiser (passage de paramètre) et la lire.
Marsh Posté le 26-05-2006 à 11:23:11
ha oui, les fonctions peuvent être <<const>>.
ex:
int getX() const;
-> renvoie la composante X, ne modifie pas l'objet vecteur.
Il doit te manquer le <<const>> sur les fonctions getX, getY et getZ, pour indiquer que ces fonctions ne modifient pas l'objet vecteur sur lesquelles elles travaillent.
Marsh Posté le 26-05-2006 à 11:24:26
c'est justement ce que j'avais compris. Mais les méthodes getX(), getY() et getZ() ne font que lire la valeur du membre x de la classe Vector3D... donc cette valeur n'est pas modifiée il me semble... Manifestement il y a encore des mystères au royaume de C++
Merci de ton explication
Marsh Posté le 26-05-2006 à 11:25:38
getX(), getY(), etc de Vector3D sont t'elles en const ?
Code :
|
Mettre un const sur l'obj indique que l'appel a la fonction ne le modifie pas.
Dans ton cas, tu appel des fonctions non const, donc qui modifie l'obj, sur un objet constant, d'ou l'erreur
edit : toasted
Marsh Posté le 26-05-2006 à 11:30:09
non, elle n'est pas modifiée, mais tu doit quand même indiquer que ces fonctions sont <<const>>.
Ce qu'il se passe, c'est que en C++, la définition des fonction, et le corps, peuvent être définis dans différents fichiers. Celà permet de faire une interface de programmation (définition des appels de fonctions) sans avoir à fournir d'emblé le code. (ça pourrait ressembler à une interface...)
Ansi, tu est obligé d'indiquer lorsqu'une fonction ne modifie pas l'objet.
ex:
Code :
|
Tu peut alors utiliser la fonction getX() sans connaître le code associé. Celà permet d'associer un code après la définition de la fonction, par exemple lors de l'édition de lien, ou lors de l'utilisation d'une librairie.
Marsh Posté le 26-05-2006 à 12:00:45
Citation : Ce qu'il se passe, c'est que en C++, la définition des fonction, et le corps, peuvent être définis dans différents fichiers. |
oui mais c'est pas ca l'explication, une methode d'objet recoit toujours en parametre "caché" l'objet sur lequel elle s'applique appelé this dans la méthode. C'est comme si elle recevait un 'object * const this' (this contient l'adresse d'un 'object') en parametre, et quand tu la specifies const ca serait un 'object const * const this' (this contient l'adresse d'un 'object const'. Apres c'est la logique, la conversion 'object const' -> 'object' est interdite
Marsh Posté le 26-05-2006 à 12:22:44
Oki, effectivement je n'avais pas vu le "truc" de la fonction const. En bon petit programmeur Java, j'avais imaginé "const == final", mais pour les méthodes ça a effectivement une autre signification...
Merci de vos lumières...
Marsh Posté le 26-05-2006 à 11:11:22
Bonjour
Je suis en train d'apprendre le langage C++ (j'avais jusqu'ici surtout fait du java) et j'ai un petit souci de compréhension avec les paramètres "const" d'une méthode
Dans une classe "Point3D" j'ai trois membre private x,y,z de type double. J'ai aussi la méthode "void translate (const Vector3D & v)
Le compilateur m'indique une erreur :
2 error: passing `const Vector3D' as `this' argument of `double Vector3D::getX()' discards qualifiers Point3D.cpp ccollisionstest line 125
Par contre si je supprime le "const", l'erreur disparaît. J'avais crû comprendre que le mot clé "const" signifiait que le paramètre n'était pas modifié, ce qui est mon cas. Pouvez-vous s.v.p. éclairer ma lanterne ?
D'avance merci
P.S. Je ne sais pas si cela à de l'importance, mais mon compilateur est gcc 3.3.5 sous linux.