Je me demande s'il est possible de rendre une variable de classe inaccessible dans cette classe? Le seul moyen de changer la valeur de cette variable sera le setter de classe. Par exemple:Comment faire une variable de classe inaccessible
class foo
{
private:
int m_var;
bool m_isBig;
void setVar(int a_var)
{
// do something before setting value, like emitting signal
m_var = a_var;
}
void method()
{
int copy = m_var; // ok
m_var = 5; // error!
setVar(101); // ok
doSomething();
}
void doSomething()
{
if(m_var > 5)
{ m_isBig = true; }
else
{ m_isBig = false; }
}
};
Je sais que je pourrais écrire une autre classe seulement avec setters et getter, mais je ne veux pas avoir accès à d'autres méthodes/vars de la classe foo (encapsulation!). Je pense que cela pourrait être un problème commun, et il pourrait y avoir un modèle de conception pour cela, mais je ne peux pas en trouver.
EDIT: J'ai édité le code pour être clair, ce que je veux faire dans setter.
duplication possible de [Une variable peut-elle être verrouillée pour empêcher toute modification dans C++?] (Http://stackoverflow.com/questions/13866440/can-a-variable-be-locked-to-prevent-changes- to-it-in-c) –
Vous pourriez probablement obtenir cette fonctionnalité comme vous le dites en créant une autre classe avec seulement des setters et un getter, et ensuite pour donner à cette classe supplémentaire l'accès aux méthodes/vars de foo vous l'auriez déclaré comme un «ami». Je pense que vous pouvez même en faire une classe interne, éventuellement seulement définie dans un fichier d'implémentation si vous voulez vraiment le garder caché. – YoungJohn
pourquoi voulez-vous cela? Si vous avez un membre privé, vous êtes responsable de la mise en œuvre, alors quel est le sens? – Jepessen