Иногда мы сталкиваемся с проблемой, когда класс не нужно использовать свои собственные свойства. См подход A:
struct Ball {
double mass = 1;
double x = 0;
double y = 0;
};
struct World {
std::vector<Ball*> balls;
void run_physics() {
// here we run the physics
// we can access every ball and their x, y properties
}
};
Чтобы избежать этого, мы можем использовать подход В:
struct World;
struct Ball {
World* world = NULL;
double mass = 1;
double x = 0;
double y = 0;
void run_physics() {
if (this->world != NULL) {
// here we run the physics again
// we can access every other ball properties through this->world->balls vector.
}
}
};
struct World {
std::vector<Ball*> balls;
};
Но подход B является тесная связь структура, что означает, что оба Ball
а также World
знать друг о друге, что не хорошо.
Итак, какой подход лучше?
Когда использовать каждый?
лучше в том больше растяжимый.
Шарики могут приобретать другие свойства, не относящиеся к текущему вычислению, такие как элементы для вычисления момента инерции (например, для полой сферы).
Так что да, для класса допустимо, чтобы его свойства использовались только внешней средой, поскольку это может быть не всегда.
Тем не менее, если x
а также y
расскажу вам кое-что о расположении мяча, тогда это скорее связано с тем, что класс рассказывает вам о сборе установленных экземпляров мяча, а не является частью самого шарика.
Других решений пока нет …