2012-04-21 2 views
4

어제 밤, 나는 어제 밤에 더 쉬운 독서를 위해 제 질문을 수정하기로 결정했습니다. 나는 군대와 전투 그룹 2 개 클래스가 있습니다. 아래를 heres 클래스, 일부가 누락 불구하고 :여러 클래스, 동일한 공개 인터페이스

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

함수 이름이 다르다는 사실은 하나의 구현이 다른 모듈로 전달되는 경우에도 디자인에서 * different *임을 나타내는 것 같습니다. 앞으로는 리팩토링하고 구현하는 것이 더 좋을 것입니다 ... 디자인에서 동일하다면 왜 다른 이름을 사용합니까? –

+0

나는 그 (것)들을 명확함을 위해 다르게 만들었다, 그러나 거의 동일한 기능을한다. –

+2

나는 명확성을 위해 그 (것)들을 다른시키기의 당신의 외침이 왜 그 (것)들에게 다른 이름을주는 이해되는지 보여준다 생각한다. "거의 똑같은"은 "의미 상으로는 같은"의미와 다른 의미를 지닙니다. 인터페이스는 사용법을 반영해야합니다. 두 기능의 구현이 비슷하지만 목적이 다른 경우 혼동을 피하기 위해 다른 이름을 사용하는 것이 좋습니다. 예를 들어 'replace'함수는 'find'함수와 거의 동일하게 구현 될 수 있지만 같은 이름을 지정하는 것은 의미가 없습니다. –

답변

2

Battlegroups이 개체 포함에만 사용되는 경우 battlegroup battlegroupobject[100]Army에 바로 사용할 수 있습니다. 또는 battlegroups 대신 std::vector<battlegroup>을 사용하십시오. 그렇지 않다면 (그리고 어쨌든), 당신의 결정은 꽤 정확 해 보입니다. 왜냐하면이 객체들의 다른 책임이 있기 때문입니다. 여기에 아주 당신의 디자인에 대해 확실하지만,하지

0

내 추측이다 : 당신이 Army, Navy 그런 다음 당신은 당신이 AddBattleGroupRemoveBattleGroup를 작성할 필요가 없습니다 있도록 Army, Battlegroups에서 Navy을 상속 할 수 있습니다 등을 갖고 싶어 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(); 

이것이 원하지 않으면, Dmitry의 대답을 고려해보십시오.

관련 문제