多个类,相同的公共接口

时间:2012-04-21 18:54:38

标签: c++ oop encapsulation

好吧,昨晚之后我决定改写我的问题以便于阅读。 我有两个班,陆军和战斗团。继下面的课程,虽然缺少一些部分:

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()方法,请告诉我。

或者,告诉我这是否是你这样做的方式,但对我而言,为了代码,它似乎是在添加代码。

2 个答案:

答案 0 :(得分:2)

如果Battlegroups仅用于包含对象,则可以使用battlegroup battlegroupobject[100]代替Army。或使用std::vector<battlegroup>代替battlegroups。如果不是(并且无论如何),您的决定似乎非常正确,因为这些对象有不同的责任。

答案 1 :(得分:0)

对您的设计不太确定,但我猜是:您希望ArmyNavy等。然后您可能想要继承ArmyNavy来自Battlegroups,因此您无需为AddBattleGroupRemoveBattleGroup等每个类别撰写ArmyNavy。如下所示:

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();

如果这不是您想要的,您可能需要考虑德米特里的答案。