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 :

methode en c++ et le mot clé const


Sujet :

C++

  1. #1
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut methode en c++ et le mot clé const
    bonjours,


    je viens de débuter avec c++
    bah lors de la déclaration des methodes dans une classe on trouve le mot clé const après la déclaration de la signature de la fct.

    int getattribut() const;

    à quoi ça peut servir???

    et quelle est la différence avec :
    const int getattribut();

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    La réponse est dans la FAQ

  3. #3
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    je vois pas vraiment l'interet???

    neanmoins je désire etre un jours l'un de ces experts du c++

    tu peux comme meme m'expliquer!

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Déclarer une méthode const c'est indiquer au compilateur qu'à l'intérieur de cette méthode on ne doit pas modifier l'état de l'objet.
    Quel est l'intérêt ?
    Ca renforce la qualité du code produit,
    Ca rajoute une information à usage interne ( je ne veux pas que cette méthode modifie mon objet) et à usage externe (cet méthode ne modifiera pas l'objet),
    Ca permet d'appeler des méthodes sur des objets const,
    Certains compilateur l'utilise pour des optimisations,
    Ca te garantie par conséquent que 2 appels consécutifs produiront le même résultat.

  5. #5
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut le mot clé const après la declaration d'une fct
    salut,

    j'ai déjà posé cette question, et moi c a dire moi j'ai marqué la réponse comme résolu????
    mais, mais...
    à dire la vérité elle n'est pas encore résolu dans ma tete!!!!

    le mot ,clé const il ajoute quoi????
    j'ai essayé de pointé sur une classe et d'y accéder à ses méthodes, qui j'ai pas marqué comme const, par le biais de ce pointe
    et bah mon programme affiche les résultats demandé mais il produit enfin un enome msg d'erreur mémoire.
    je me suis arrivé à résoudre cela par le modit mot clé " const ".

    bah, si tu veux me repondre n'hesite pas j'ai déjà des petites notions sur le preprocesseur, la compilation.................


    merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le mot-clé const sur une méthode indique deux choses:
    1. La méthode n'a pas le droit de modifier directement les variables de la classe ("this" est considéré comme un pointeur const, et les variables membres sont donc considérées const)
    2. On a le droit d'appeler cette méthode depuis un pointeur const sur l'objet.


    Ainsi, on aura droit à des erreurs de compilation:
    • Si on tente de modifier une variable dans une méthode déclarée const
    • Si on tente d'appeler une méthode non-const depuis un pointeur const sur l'objet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    bon ça se traite à quel phase de compilation??

    de point de vue structure de donnée et compilation ça ajoute quoi???

    hé à vrai je sais que je suis exigent et je pose des questions de merde mais mon objectif
    c uriditer ce langege de programmation qui me parrait magnifique!!!!

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne comprends pas tes deux dernières questions...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Ce que cela apporte tient en un mot anglais "const-correctness".

    En gros, lorsque tu déclares une fonction comme étant constante, tu indique au compilateur "attention, cette fonction s'engage à ne pas modifier l'objet courent".

    Cela a pour résultat, comme indiqué par 3DArchi et Medinoc, que si ta fonction renvoie une information quelconque sous la forme d'une référence ou d'un pointeur, tu ne pourra pas essayer d'en modifier le contenu, vu que l'objet courent n'est pas destiné à être modifié.

    D'un autre coté, cela incitera le compilateur à te "jeter" si tu essaye, malgré tout, de modifier l'objet courent dans la fonction.

    Tout cela aura un résultat finalement simple, efficace et très utile: t'assurer que tu te fera réprimander par le compilateur si, d'aventure, tu venais à ne pas respecter l'engagement pris de ne pas modifier l'objet courent

    Au final, cela t'apporte une sécurité acrue dans l'utilisation de tes objets.

    L'information importante que représente le mot clé const à cette place est de dire que l'objet est à considéré comme constant, c'est à dire ne devant pas être modifié.

    La différence avec la une fonction const int f() est que cette fonction peut s'appliquer à un objet non constant mais va renvoyer une valeur qui, elle, n'a pas vocation à être modifiée.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre habitué Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Points : 190
    Points
    190
    Par défaut
    Pour ajouter mon grain de sel, je dirais, que la notion de méthode const est une des belles finesses de ce magnifique langage magnifiquement conçu mais qui demande beaucoup de pratique pour en saisir toutes les subtilités.
    Alors mon gars, si tu veux devenir un expert, fais craquer tes doigts et enfourche ton compilateur !
    Éventuellement fais l'acquisition du Bjarne Stroustrup.
    http://www.amazon.fr/langage-C-Bjarn...8969313&sr=8-2
    Son livre est très critiquable mais selon moi, ça reste la bible (s'il y a des avis contraires, ça m'intéresse)

    Juste pour l'exemple, voici une possibilité offert par const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class yet_another_string_class
        {
        //...
        char & operator [] ( int i ) ;
        const char & operator [] ( int i ) const ;
        } ;
    La seconde version est const ce qui va garantir un accès en lecture seule et permettre toutes sortes d'optimisations...
    Si à cet exemple tu réponds "boarf ! j'vois pas l'intérêt...", c'est qu'il faut vraiment que tu t'y mettes !
    [WinXP sp3 / Visual 2005 / Eclipse Ganymede / Python 2.6]
    Hadrien

  11. #11
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par sopsag Voir le message
    Éventuellement fais l'acquisition du Bjarne Stroustrup.
    http://www.amazon.fr/langage-C-Bjarn...8969313&sr=8-2
    Son livre est très critiquable mais selon moi, ça reste la bible (s'il y a des avis contraires, ça m'intéresse)
    Pour débuter ne vaudrait-il pas mieux recommander le nouveau livre de Stroustrup de janvier 2009 :

    Programming, Principles and Practise Using C++ :
    http://www.stroustrup.com/Programming/

    Le livre que tu cites étant peut-être à utiliser plutôt comme une 'référence' complémentaire ?
    Sur la méthodologie du C++ j'ai lu avec un très vif intérêt et beaucoup de plaisir le très accessible :

    Effective C++, 55 Specific Ways to Improve Your Programs and Design, Third Edition, par Scott Meyers

    il contient d'excellents passages sur const

Discussions similaires

  1. Réponses: 56
    Dernier message: 17/08/2008, 22h56
  2. question sur le mot clef const
    Par elmcherqui dans le forum C++
    Réponses: 3
    Dernier message: 08/07/2008, 08h42
  3. mot cle const
    Par elmcherqui dans le forum C++
    Réponses: 47
    Dernier message: 22/03/2008, 07h36
  4. Réponses: 14
    Dernier message: 25/10/2007, 15h00
  5. [debutant] le mot clé const
    Par r0d dans le forum Débuter
    Réponses: 12
    Dernier message: 21/06/2006, 16h13

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