Ceci est appelé un invariant. C'est une relation qui doit tenir, mais ne peut pas être appliquée par les moyens fournis par le langage de programmation. Les invariants ne devraient être introduits que lorsqu'ils sont vraiment nécessaires. D'une certaine manière, les choses sont relativement «mauvaises», car elles peuvent être brisées par inadvertance. Donc, la première question que vous devez vous poser est de savoir si vous devez vraiment introduire cet invariant. Peut-être que vous pouvez faire sans deux variables dans ce cas, et peut simplement générer la deuxième valeur à partir de la première variable à la volée, tout comme James suggéré dans sa réponse.
Mais si vous avez vraiment besoin de deux variables (et très souvent il n'y a pas moyen de contourner cela), vous vous retrouverez avec un invariant. Bien sûr, il est possible d'implémenter manuellement quelque chose en C++ qui relierait les variables ensemble et en changerait une quand l'autre changerait, mais la plupart du temps cela n'en vaut pas la peine. La meilleure chose que vous pouvez faire, si vous avez vraiment besoin de deux variables, encore une fois, est de faire attention à garder la relation nécessaire manuellement et utiliser beaucoup d'affirmations qui vérifierait l'invariant chaque fois qu'il peut casser (et parfois même quand il ne peut pas) , comme
assert(y == x - 10);
dans votre cas. En outre, certaines bibliothèques C++ tierces avancées (telles que Boost, par exemple) pourraient fournir des outils d'assertion de haut niveau pouvant être programmés pour surveiller les invariants dans le code (je ne peux pas suggérer n'importe quoi), c.-à-d. que vous pouvez faire fonctionner la langue pour vous ici, mais cela doit être une solution de bibliothèque. Le langage de base ne vous aidera pas ici.
Est-ce que C++ a une variable d'instanciation par référence comme en PHP? Vous pouvez instancier y pour avoir la référence à x-10, donc quand x change, x-10 change également en y. –
Je suggère la solution de James pour utiliser une seule variable. Si vous ne pouvez pas le faire pour une raison quelconque, le contrôle d'accès (membres privés) vous aide à imposer cet invariant puisque personne en dehors de la classe ne peut jouer avec x et y. – sellibitze