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