4

わかりました、昨夜の後、読みやすいように質問を言い換えることにしました。陸軍と戦闘グループの 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() メソッドにアクセスする方法があれば教えてください。

または、これがあなたのやり方かどうか教えてください。しかし、私には、コードのためにコードを追加するように思えます。

4

2 に答える 2

2

Battlegroupsオブジェクトを含むためだけに を使用する場合は、代わりにbattlegroup battlegroupobject[100]right in theを使用できますArmy。またはstd::vector<battlegroup> の代わりに使用しbattlegroupsます。そうでない場合 (とにかく)、これらのオブジェクトにはさまざまな責任があるため、あなたの決定は非常に正しいようです。

于 2012-04-21T19:11:21.650 に答える
0

あなたのデザインについてはよくわかりませんが、ここに私の推測があります:あなたは、などをArmy持ちNavyたいArmyです. 次のように:NavyBattlegroupsAddBattleGroupRemoveBattleGroupArmyNavy

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

これがあなたの望むものではない場合は、Dmitry の回答を検討してください。

于 2012-04-22T03:36:33.993 に答える