我有一个:
class galaxy
{
private:
std::string type;
double mass;
std::vector<galaxy> satellites;
public:
//things here
};
因此,星系可以拥有本身就是星系的卫星。但是,如果我这样做,那么卫星本身就会拥有卫星。
除了星系矢量之外,我是否必须创建具有完全相同属性的另一个类?还是还有另一种更好的方法?
答案 0 :(得分:0)
您可以根据情况应用“复合设计模式”。我们定义了两个独立的星体Satellite和Galaxy。但是只有银河有卫星的容器(向量)。
这是我的示例解决方案:
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();
}
};
答案 1 :(得分:0)
为什么卫星不能有卫星?整个宇宙的运行方式几乎都是递归的!
但是,把它放在一边。
如果按照您的概念,并不是每个星系都可以拥有卫星,那么卫星列表就不应该成为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>>
。
但是我让您找出细节:关键是这个容器可能不应该在您的课程中。