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 :

question sur le mot clef const


Sujet :

C++

  1. #1
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut question sur le mot clef const
    bonsoir ,
    c'est mon deuxieme post sur ce mot clef mysterieux qu'est le const .
    j'ai quelques questions si vous le voulez bien .

    c'est quoi la difference entre ces fonctions :
    (c'est des prototypes.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     //la difference entre sa ?
    int A(int nbr);
     
    //et sa
    const int B(int nbr);
     
    //et sa 
    int C(int nbr) const ;
    je voudrais savoir si sa existe ces fonctions et si oui ils font quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //sa existe ?
    const int D( const int nbr ) const ;
     
    //et sa
    const int E(const int nbr);

    je sais que je demande beaucoup mais j'aimerais en finir une fois pour toute avec ce mot clef .

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    const placé à la fin d'une fonction membre d'une classe, par exemple:
    int MaClasse::maFonction(int a,int b) const;
    spécifie que cette fonction ne modifie pas le contenu de la classe.

    Je ne vois pas de différence pratique fondamentale entre
    const int fonction();
    et
    int fonction();

    Une valeur de retour est rarement modifiée dans son espace mémoire, néanmoins, dans le premier cas ce ne sera pas possible.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est surtout utilisé lorsqu'un fonction retourne un pointeur sur une donnée membre de la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const struct toto *MaFunction(void) const;
    Cela indique que la fonction "MaFunction()" retourne un pointeur sur une structure "toto" qui ne PEUT/DOIT pas être modifiée (peut être une donnée membre)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  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
    Le mot clé const prend tout son sens lorsque les paramètres ou les valeurs en retour sont passés par référence et non par valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void Methode(const int&P_iParam)
    {
        P_iParam++; // Erreur
    }
    void Methode2(int &P_iParam)
    {
        P_iParam++; // OK
    }
    Dans le premier cas (Methode), il te sera impossible de modifier la valeur de P_iParam. Dans le second (Methode2), si.
    Toujours dans ces exemples, on aura:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	int L_i;
    	MaMethode(1); // OK
    	MaMethode(L_i); // OK
    	MaMethode2(1);// Erreur
    	MaMethode2(L_i);// OK
    le_duche t'a apporté une réponse pour les fonctions membres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class A
    {
    public:
    	int m_iMembre;
    	void Methode()
    	{
    		m_iMembre++; // OK
    	}
     
    	void Methode() const
    	{
    		m_iMembre++; // Erreur
    	}
     
    };
    Enfin, pour ton dernier exemple, la réponse au premier est identique. Dans ce dernier cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class A
    {
    public:
    	int m_iMembre;
    	A(){m_iMembre=0;}
    	int &MaFonction()
    	{
    		return m_iMembre;
    	}
    	const int&MaFonction2()
    	{
    		return m_iMembre;
    	}
     
    };
     
    void B::ACaller()
    {
    	A a; // a.m_iMembre vaut 0
    	a.MaFonction()++; // OK - a.m_iMembre vaut 1
    	a.MaFonction2()++; // Erreur
    }
    L'intérêt de tout ça est de maîtriser le comportement de ton objet par rapport à l'interface qu'il offre. Certaines méthodes sont const pour à la fois signifier à l'utilisateur qu'elles n'ont pas d'impact sur l'état de l'objet. Le mot clé permet alors de le garantir par compilation.
    Les paramètres sont const pour permettre un passage par référence (plus efficace) sans que la méthode ne puisse les modifier.
    Les valeurs en retour d'une méthode sont en const pour permettre des retours par référence (plus efficace) et garantir pourtant que l'utilisateur de l'interface ne pourra les modifier.
    Je t'encourage vivement à te familiariser avec cette notion et de construire tes classes en prenant en compte ce mot clé. Cela aide grandement en phase de conception. Ca permet de mûrir vraiment la classe que l'on souhaite implémenter en articulant son état avec son interface.

Discussions similaires

  1. Deux questions sur le mot clé EXTERN
    Par Bleys dans le forum C++
    Réponses: 4
    Dernier message: 02/03/2008, 14h58
  2. statistiques sur les mots clef
    Par Acropole dans le forum Statistiques
    Réponses: 7
    Dernier message: 22/12/2007, 20h33
  3. Réponses: 14
    Dernier message: 25/10/2007, 15h00
  4. [Sécurité] Question sur les mots de passes
    Par wallawalla dans le forum Langage
    Réponses: 4
    Dernier message: 02/04/2007, 17h51

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