多个类,相同的公共接口

multiple classes, same public interface

本文关键字:接口      更新时间:2023-10-16

好的,经过昨晚,我决定改写我的问题以便于阅读。我有2个班级,军队和战斗组。以下是下面的类,尽管缺少一些部分:

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

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

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

不太

确定你的设计,但这是我的猜测:你想要ArmyNavy等。然后你可能想继承ArmyNavyBattlegroups,这样你就不需要为每个类写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();

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