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 :

Problème de const


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Problème de const
    Bonjour à tous,

    J'ai une classe englobant une valeur. Elle possède donc deux méthodes:
    - Une pour récupérer la valeur
    - Une pour définir la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class C1
    {
       SetValue(const& Obj);
       const Obj& GetValue() const;
    };
    J'ai une autre classe qui englobe celle ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class C2
    {
       C1& GetC1();
    private:
       C1 m_oC1;
    }
    Je ne l'ai pas mis en const car la valeur dans m_oC1 pourra être modifiée en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oC2.GetC1().SetValue(valeur)
    Mais à un autre endroit de mon code, on a pas à remplacer cette valeur, donc j'ai proposé une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MaMethode(const C2* oC2)
    {
        const Obj& oObj = oC2->GetC1().GetValue(); // Erreur
    }
    Le soucis c'est que la méthode "GetC1()" n'est pas const, donc le compilateur me fait une erreur lorsque j'appelle cette méthode sur un "const C2*).

    Si je mets GetC1 en const, on ne pourra plus appeler SetValue derrière.
    Si je fais "void MaMethode(C2* oC2)", cette méthode pourra modifier les données.

    Comment est-ce que je peux faire pour que ça fonctionne sans pour autant baisser la sécurité d'accès aux différents membres ?


    Merci beaucoup

    A bientôt

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Il te suffit d'ajouter une méthode const :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class C2
    {
    public:
       C1& GetC1();
       C1 const & GetC1() const;
    private:
       C1 m_oC1;
    }
    Ou encore de donner l'acces direct à l'instance de C1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class C2
    {
    public:
       C1 m_oC1;
    }

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok, je vais prendre la première solution

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème conversion const char *
    Par autoz dans le forum Débuter
    Réponses: 5
    Dernier message: 15/10/2009, 21h19
  2. Problème de const et de pointeur dans une méthode
    Par Vonziz dans le forum Débuter
    Réponses: 15
    Dernier message: 18/09/2008, 14h41
  3. problème avec const correctness
    Par donkeyquote dans le forum C++
    Réponses: 5
    Dernier message: 12/10/2007, 01h55
  4. Problèmes avec const ?
    Par oodini dans le forum C++
    Réponses: 11
    Dernier message: 16/02/2007, 15h48
  5. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25

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