2016-07-16 3 views
0

У меня есть класс с 2 переменными. Они публичные.Взаимодействие переменных класса класса C++

Я хочу инициализировать их таким образом, чтобы каждый из них был кратным другому, и когда я обновляю первый, другой будет автоматически обновляться.

В моем объявлении класса:

`

public: 

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

` Когда я обновляю Variable1, я хочу, чтобы проверить, что обновленное значение variable2 есть, и делать некоторые вещи, основываясь на этом результате.

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

Так что я знаю, что я мог бы обойти эту проблему, обновив вторую переменную, но я знаю, что должен быть способ, чтобы он второй переменной постоянно обновлять. Проблема явно в декларации, но «const», или «static», не поможет ... Я не думаю. Если бы я мог найти красноречивый способ рассказать о проблеме, я уверен, что смогу ответить Google. Но я не могу!

ответ

2

Вы просто не можете этого сделать. Правильный путь - через инкапсуляцию.

В приведенном ниже примере просто вызовите геттеры, чтобы получить значение (inlined = так же быстро, как прямой доступ), и вы можете изменять только 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() 'может изменить' variable1', а затем вызвать функцию 'private', которая выполняет любую работу, необходимую для обновления' variable2'. –

+0

Хорошо! Если это невозможно, все в порядке. В основном я хочу проверить, что комбинация переменных не принимает переменную2 выше определенной суммы. Я научу его правильно отформатировать. Спасибо всем за помощь! –

1

Просто не делайте этого ... создайте только одну переменную и при необходимости умножьте ее.

1

Лучше всего было бы просто использовать кратный переменную 1 всякий раз, когда вы будете использовать переменные 2

для если заявления используйте

if((variable1 * 10) > 10){ 
    //do stuff 
} 
Смежные вопросы