Если вы используете глобальные переменные для хранения состояния круга, то вы можете иметь только один круг в любое время, потому что если у вас их два, они оба будут пытаться использовать одни и те же глобальные переменные для хранения своего состояния, и это было бы грязно.
Сделать переменные состояния member переменными, чтобы у каждого экземпляра класса была своя собственная версия. Это один из принципов объектно-ориентированного программирования.
Если у вас есть переменные, которые должны быть общими для всех экземпляров класса , сделайте их статическими переменными-членами . Таким образом, вы знаете, что только ваши объекты могут получить к ним доступ (если вы решите использовать для них видимость private
или protected
), и никто, кто не знает, что они делают, не станет с ними ввязываться. 1013 *
Пример:
class Circle {
public:
Circle(double x, double y, double diameter) : x(x), y(y), diameter(diameter) { }
double X() const { return x; }
double Y() const { return y; }
double diameter() const { return diameter; }
...
private:
double x, y, diameter;
};
Теперь, когда у нас есть два Circle
с, они ведут себя нормально:
Circle c1(4.0, 4.0, 6.0);
Circle c2(1.0, 6.0, 3.0);
cout << c1.X() << endl
<< c2.X() << endl;
// prints 4 and 1
Но если мы сделаем это таким образом с глобалами:
// BAD, DON'T DO THIS
double x = 0, y = 0, diameter = 0;
class Circle {
public:
Circle(double _x, double _y, double _diameter) {
x = _x, y = _y, diameter = _diameter;
}
double X() const { return x; }
double Y() const { return y; }
double diameter() const { return diameter; }
};
Когда у нас два круга:
Circle c1(4.0, 4.0, 6.0);
Circle c2(1.0, 6.0, 3.0);
cout << c1.X() << endl
<< c2.X() << endl;
// prints 1 and 1
Последнее Circle
, которое вы создадите, перезапишет все остальные Circle
s данные. Как видите, это не очень хорошая вещь.