我有一个:
class galaxy
{
private:
std::string type;
double mass;
std::vector<galaxy> satellites;
public:
//things here
};
所以一个星系可以有卫星,这些卫星本身就是星系。但如果我这样做,卫星本身就会有卫星。
除了星系向量之外,我还必须用同样的属性创建另一个类吗?还是有其他更好的方法?
发布于 2019-02-18 22:26:45
为什么卫星不能有卫星?我们整个宇宙是如何运作的,这几乎是绕体运行的一种递归模式!
但是,把这个放在一边。
如果,在你的概念中,不是每个星系都能有卫星,那么卫星列表就不应该是galaxy
的一部分。
为什么不把这种逻辑从课堂上拿出来呢?
class galaxy
{
private:
std::string type;
double mass;
public:
//things here
};
std::map<galaxy, std::vector<galaxy>> galaxiesWithSatellites;
这张地图将取代你目前用来存储星系的任何结构。现在,整个应用程序中只有一个星系->卫星地图。
请注意,我并不一定认为它必须是一个map
;它带来了它自身的复杂性(例如,您的星系需要小于可比较的);相反,您可以给每个星系它自己的唯一ID,然后有一个std::map<GalaxyId, std::vector<galaxy>>
。
但我将让您了解细节:重点是这个容器可能不应该在您的类中。
发布于 2019-02-18 21:46:07
您可以在您的情况下应用组合设计模式。我们定义了两个被隔开的卫星和星系。但只有银河有卫星的容器(载体)。
这是我的示例解决方案:
class Component
{
protected:
std::string type;
double mass;
public:
virtual void traverse() = 0;
};
class Satellite: public Component
{
public:
void traverse() override
{
}
};
class Galaxy: public Component
{
private:
vector < Component* > satellites;
public:
void add(Component* item)
{
satellites.push_back(item);
}
void traverse() override
{
for (int i = 0; i < children.size(); i++)
satellites[i]->traverse();
}
};
https://stackoverflow.com/questions/54755538
复制相似问题