class Battlegroups
{
private: battlegroup battlegroupobject[100];
public:
void AddBattleGroup(); //add a battlegroup object to the array
void removebattlegroup(); //remove a battle group objects from the array
};
class Army
{
private: battlegroups battlegroupsobject;
public:
void formbattlegroup()
{
battlegroupsobject.AddBattleGroup();
}
void disbandbattlegroup()
{
battlegroupsobject.removebattlegroup();
}
};
看,问题是formbattlegroup()和disbandbattlegroup(),这似乎是它添加了一个无意义的接口。
如果我有办法在不执行上述操作的情况下访问Addbattlegroup和removebattlegroup()方法,请告诉我。
或者,告诉我这是否是你这样做的方式,但对我而言,为了代码,它似乎是在添加代码。
答案 0 :(得分:2)
如果Battlegroups
仅用于包含对象,则可以使用battlegroup battlegroupobject[100]
代替Army
。或使用std::vector<battlegroup>
代替battlegroups
。如果不是(并且无论如何),您的决定似乎非常正确,因为这些对象有不同的责任。
答案 1 :(得分:0)
对您的设计不太确定,但我猜是:您希望Army
,Navy
等。然后您可能想要继承Army
,Navy
来自Battlegroups
,因此您无需为AddBattleGroup
,RemoveBattleGroup
等每个类别撰写Army
和Navy
。如下所示:
class Battlegroups
{
// side-note: you may want to replaced below by std::vector<battlegroup>
private: battlegroup battlegroupobject[100];
public:
void AddBattleGroup();
void RemoveBattleGroup();
};
class Army
: public Battlegroups
{
// other specific implementations
};
class Navy
: public Battlegroups
{
// other specific implementations
};
// usage
Army army1;
army1.AddBattleGroup();
Navy navy1;
navy1.AddBattleGroup();
如果这不是您想要的,您可能需要考虑德米特里的答案。