2016-07-16 13 views
0

私は2つの変数を持つクラスを持っています。彼らは一般公開されています。C++クラスメンバー変数の対話

私はそれらが常に他のものの倍数であるようにそれらを初期化したいと思います、私が最初に更新するとき、他は自動的に更新されます。私のクラス宣言で

`

public: 

Int variable1; 
Int variable2 = (10*variable1); 

` 私は変数1を更新し、私は、変数2の更新された値が何であるかをチェックし、その結果に基づいていくつかのものをやってみたいです。

variable1++; 
If (variable2 > 10) 
{ 
//Do stuff 
} 

だから私は、私は2番目の変数を更新することでこの問題を回避できることを知っているが、私は彼二変数は常に更新持つ方法がなければならない知っています。問題は明らかに宣言にありますが、 "const"または "static"は助けになりません...私は思っていません。私が問題を語る雄弁な方法を見つけることができたら、私は答えをGoogleに送ることができると確信しています。しかし、私はできません!

答えて

2

あなたはそのようにすることはできません。正しい方法はカプセル化によるものです。

以下の例では、ゲッターを呼び出して値を取得しています(直接アクセスと同じ速さです)。variable1しか変更できません。 set_variable2メソッドを追加することはできますが、ほとんど意味がありません。

public: 
    inline int get_variable1() const { return variable1; } 
    inline int get_variable2() const { return variable1*10; } 
    inline void set_variable1(int new_value) { variable1=new_value; } 

private: 
int variable1; 
+0

以上の一般的な場合、 'set_variable1に使用し、変数1の倍数を使用することです'variable1'を修正し、次に' variable2'を更新するのに必要な作業を行う 'private'関数を呼び出します。 –

+0

それが可能でないなら、それは問題ありません。基本的に私は、変数の組み合わせが一定量以上のvariable2を取らないことを確認したいと思っています。私はそれを正しくフォーマットすることを学びます。みんなで助けてくれてありがとう! –

1

単純にしないでください... 1つの変数のみを作成し、必要に応じて乗算してください。

1

最良の方法は)(あなたのif文のための変数2

を使用したときにちょうど

if((variable1 * 10) > 10){ 
    //do stuff 
} 
関連する問題