IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

le mot const aprés la méthode, c'est quoi son utilité?


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    12
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : 12
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut le mot const aprés la méthode, c'est quoi son utilité?
    bonsoir,
    toutes les méthodes déclarées dans les classes et surtout les getters et les constructeurs sont declarés avec un const à la fin de leurs prototypes .
    a quoi sert ce "const" et pourquoi pas la meme chose pour les setters ?
    est ce pour ne pas modifier le corps de la fonction !? et pourquoi pas la meme chose pour les setters ?
    mais une dernière chose c'est quoi la différence entre le fait de mettre const avant la fonction et après la fonction ? avant le type du paramètre et aprés le type ?
    ex : ( const int a ) et (int const a )?

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Je vais te répondre puisque tu me l'as demandé suite à mon message sur un autre fil de discussion
    ... et qu'après 2 jours tu n'as toujours pas trouvé la réponse

    1) void operator+ (Complex const& other): ici c'est other que l'on ne peut pas modifier. D'ailleurs c'est une bonne pratique, puisque avec un passage référence on peut modifier le paramètre

    PS: Je parlais de variantes puisqu'on peut "balader" le const: Complex const& other, const Complex& other, Complex& const other.
    Mais je ne sais pas si toutes compilent

    Édit: Il y a aussi void dummy(int const* const fake) {} Je te laisse chercher

    2) void operator+ (Complex& other) const: ici c'est *this que l'on ne peut pas modifier.

    PS: Comme *this est constant avec un retour void, c'est un exemple un peu bizarre
    Et justement @JolyLoic disait que dans les règles de l'art, il faut mettre *this constant et retourner le résultat de l'addition. Retour référence pour pourvoir chaîner les additions


    Liens:


    Édit: Merci Luc Hermitte pour ta correction

  3. #3
    Membre confirmé
    Homme Profil pro
    12
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : 12
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut
    Merci foetus,
    vous avez dit que dans la fonction: void operator+ (Complex& other) const: on peut pas modifier le this car la fontion est avec un const!
    comment ca et l'objectif de la fonction est d'ajouter le real et le image de other aux real et imag de l'objet courant ( this) ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Je l'ai dit: mon exemple est mauvais , mais il est là parce que tu te mélanges les pédales si c'est le paramètre ou bien *this qui est constant.

    Si *this est contant, le compilateur vérifiera que 1) les attributs de la classe ne sont pas modifiés et que 2) cette méthode n'appelle que des méthodes constantes.

  5. #5
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 734
    Par défaut
    Non, operator +() ne modifie pas l'instance, 3+4 ne change pas le 3 en 7, c'est le résultat de l'addition qui vaut 7. En revanche operator +=() modifie this.

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ce n'est pas this, mais *this qui devient constant suite au const en fin des signatures des fonctions membres.
    this est pour sa part toujours constant.

    Engin, "T&const" n'est pas une écriture valide. Seules "T const&" et "const T&" le sont. La FAQ parle de const relativement aux pointeurs. C'est la même chose pour les référence (et vu qu'un alias n'est pas modifiable une fois établi, l'écriture "T& const" n'est pas valide.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Intérêt de mot clef const dans une méthode
    Par teddyalbina dans le forum C#
    Réponses: 3
    Dernier message: 05/03/2012, 14h22
  2. Modifier le code après la compilation, c'est possible?
    Par marcus333 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 09h52
  3. [power AMC] Quels est vraiment son utilité?
    Par alpachico dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 08/08/2005, 08h24
  4. probleme avec le mot const et operateur==
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 06/05/2005, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo